home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 September / CHIP Eylül 1996.iso / utils / povray / povsrc.sea / POVSRC / SOURCE / BEZIER.C < prev    next >
MacBinary  |  1993-11-09  |  30.6 KB  |  [TEXT/MPS ]

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: MacBinary (archive/macBinary).

ConfidenceProgramDetectionMatch TypeSupport
66% dexvert Compact Compressed (Unix) (archive/compact) ext Supported
10% dexvert MacBinary (archive/macBinary) fallback Supported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, inited, Tue Nov 9 14:33:16 1993, modified Tue Nov 9 14:33:16 1993, creator 'MPS ', type ASCII, 30675 bytes "BEZIER.C" , at 0x7853 428 bytes resource default (weak)
99% file data default
74% TrID Macintosh plain text (MacBinary) default
25% TrID MacBinary 2 default (weak)
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[MPS ]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 08 42 45 5a 49 45 52 | 2e 43 00 00 00 00 00 00 |..BEZIER|.C......|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 50 53 | 20 01 00 00 00 00 00 00 |.TEXTMPS| .......|
|00000050| 00 00 00 00 00 77 d3 00 | 00 01 ac a9 05 a0 fc a9 |.....w..|........|
|00000060| 05 a0 fc 00 00 08 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 77 86 00 00 |........|....w...|
|00000080| 2f 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |/*******|********|
|00000090| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000000a0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000000b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000000c0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 0d 2a 20 |********|*****.* |
|000000d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000000e0| 20 20 62 65 7a 69 65 72 | 2e 63 0d 2a 0d 2a 20 20 | bezier|.c.*.* |
|000000f0| 54 68 69 73 20 6d 6f 64 | 75 6c 65 20 69 6d 70 6c |This mod|ule impl|
|00000100| 65 6d 65 6e 74 73 20 74 | 68 65 20 63 6f 64 65 20 |ements t|he code |
|00000110| 66 6f 72 20 42 65 7a 69 | 65 72 20 62 69 63 75 62 |for Bezi|er bicub|
|00000120| 69 63 20 70 61 74 63 68 | 20 73 68 61 70 65 73 0d |ic patch| shapes.|
|00000130| 2a 0d 2a 20 20 54 68 69 | 73 20 66 69 6c 65 20 77 |*.* Thi|s file w|
|00000140| 61 73 20 77 72 69 74 74 | 65 6e 20 62 79 20 41 6c |as writt|en by Al|
|00000150| 65 78 61 6e 64 65 72 20 | 45 6e 7a 6d 61 6e 6e 2e |exander |Enzmann.|
|00000160| 09 48 65 20 77 72 6f 74 | 65 20 74 68 65 20 63 6f |.He wrot|e the co|
|00000170| 64 65 20 66 6f 72 0d 2a | 20 20 62 65 7a 69 65 72 |de for.*| bezier|
|00000180| 20 62 69 63 75 62 69 63 | 20 70 61 74 63 68 65 73 | bicubic| patches|
|00000190| 20 61 6e 64 20 67 65 6e | 65 72 6f 75 73 6c 79 20 | and gen|erously |
|000001a0| 70 72 6f 76 69 64 65 64 | 20 75 73 20 74 68 65 73 |provided| us thes|
|000001b0| 65 20 65 6e 68 61 6e 63 | 65 6d 65 6e 74 73 2e 0d |e enhanc|ements..|
|000001c0| 2a 0d 2a 20 20 66 72 6f | 6d 20 50 65 72 73 69 73 |*.* fro|m Persis|
|000001d0| 74 65 6e 63 65 20 6f 66 | 20 56 69 73 69 6f 6e 20 |tence of| Vision |
|000001e0| 52 61 79 74 72 61 63 65 | 72 0d 2a 20 20 43 6f 70 |Raytrace|r.* Cop|
|000001f0| 79 72 69 67 68 74 20 31 | 39 39 33 20 50 65 72 73 |yright 1|993 Pers|
|00000200| 69 73 74 65 6e 63 65 20 | 6f 66 20 56 69 73 69 6f |istence |of Visio|
|00000210| 6e 20 54 65 61 6d 0d 2a | 2d 2d 2d 2d 2d 2d 2d 2d |n Team.*|--------|
|00000220| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000230| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000240| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000250| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000260| 2d 2d 2d 0d 2a 20 20 4e | 4f 54 49 43 45 3a 20 54 |---.* N|OTICE: T|
|00000270| 68 69 73 20 73 6f 75 72 | 63 65 20 63 6f 64 65 20 |his sour|ce code |
|00000280| 66 69 6c 65 20 69 73 20 | 70 72 6f 76 69 64 65 64 |file is |provided|
|00000290| 20 73 6f 20 74 68 61 74 | 20 75 73 65 72 73 20 6d | so that| users m|
|000002a0| 61 79 20 65 78 70 65 72 | 69 6d 65 6e 74 0d 2a 20 |ay exper|iment.* |
|000002b0| 20 77 69 74 68 20 65 6e | 68 61 6e 63 65 6d 65 6e | with en|hancemen|
|000002c0| 74 73 20 74 6f 20 50 4f | 56 2d 52 61 79 20 61 6e |ts to PO|V-Ray an|
|000002d0| 64 20 74 6f 20 70 6f 72 | 74 20 74 68 65 20 73 6f |d to por|t the so|
|000002e0| 66 74 77 61 72 65 20 74 | 6f 20 70 6c 61 74 66 6f |ftware t|o platfo|
|000002f0| 72 6d 73 20 6f 74 68 65 | 72 20 0d 2a 20 20 74 68 |rms othe|r .* th|
|00000300| 61 6e 20 74 68 6f 73 65 | 20 73 75 70 70 6f 72 74 |an those| support|
|00000310| 65 64 20 62 79 20 74 68 | 65 20 50 4f 56 2d 52 61 |ed by th|e POV-Ra|
|00000320| 79 20 54 65 61 6d 2e 20 | 20 54 68 65 72 65 20 61 |y Team. | There a|
|00000330| 72 65 20 73 74 72 69 63 | 74 20 72 75 6c 65 73 20 |re stric|t rules |
|00000340| 75 6e 64 65 72 0d 2a 20 | 20 77 68 69 63 68 20 79 |under.* | which y|
|00000350| 6f 75 20 61 72 65 20 70 | 65 72 6d 69 74 74 65 64 |ou are p|ermitted|
|00000360| 20 74 6f 20 75 73 65 20 | 74 68 69 73 20 66 69 6c | to use |this fil|
|00000370| 65 2e 20 20 54 68 65 20 | 72 75 6c 65 73 20 61 72 |e. The |rules ar|
|00000380| 65 20 69 6e 20 74 68 65 | 20 66 69 6c 65 0d 2a 20 |e in the| file.* |
|00000390| 20 6e 61 6d 65 64 20 50 | 4f 56 4c 45 47 41 4c 2e | named P|OVLEGAL.|
|000003a0| 44 4f 43 20 77 68 69 63 | 68 20 73 68 6f 75 6c 64 |DOC whic|h should|
|000003b0| 20 62 65 20 64 69 73 74 | 72 69 62 75 74 65 64 20 | be dist|ributed |
|000003c0| 77 69 74 68 20 74 68 69 | 73 20 66 69 6c 65 2e 20 |with thi|s file. |
|000003d0| 49 66 20 0d 2a 20 20 50 | 4f 56 4c 45 47 41 4c 2e |If .* P|OVLEGAL.|
|000003e0| 44 4f 43 20 69 73 20 6e | 6f 74 20 61 76 61 69 6c |DOC is n|ot avail|
|000003f0| 61 62 6c 65 20 6f 72 20 | 66 6f 72 20 6d 6f 72 65 |able or |for more|
|00000400| 20 69 6e 66 6f 20 70 6c | 65 61 73 65 20 63 6f 6e | info pl|ease con|
|00000410| 74 61 63 74 20 74 68 65 | 20 50 4f 56 2d 52 61 79 |tact the| POV-Ray|
|00000420| 0d 2a 20 20 54 65 61 6d | 20 43 6f 6f 72 64 69 6e |.* Team| Coordin|
|00000430| 61 74 6f 72 20 62 79 20 | 6c 65 61 76 69 6e 67 20 |ator by |leaving |
|00000440| 61 20 6d 65 73 73 61 67 | 65 20 69 6e 20 43 6f 6d |a messag|e in Com|
|00000450| 70 75 53 65 72 76 65 27 | 73 20 47 72 61 70 68 69 |puServe'|s Graphi|
|00000460| 63 73 20 44 65 76 65 6c | 6f 70 65 72 27 73 0d 2a |cs Devel|oper's.*|
|00000470| 20 20 46 6f 72 75 6d 2e | 20 20 54 68 65 20 6c 61 | Forum.| The la|
|00000480| 74 65 73 74 20 76 65 72 | 73 69 6f 6e 20 6f 66 20 |test ver|sion of |
|00000490| 50 4f 56 2d 52 61 79 20 | 6d 61 79 20 62 65 20 66 |POV-Ray |may be f|
|000004a0| 6f 75 6e 64 20 74 68 65 | 72 65 20 61 73 20 77 65 |ound the|re as we|
|000004b0| 6c 6c 2e 0d 2a 0d 2a 20 | 54 68 69 73 20 70 72 6f |ll..*.* |This pro|
|000004c0| 67 72 61 6d 20 69 73 20 | 62 61 73 65 64 20 6f 6e |gram is |based on|
|000004d0| 20 74 68 65 20 70 6f 70 | 75 6c 61 72 20 44 4b 42 | the pop|ular DKB|
|000004e0| 20 72 61 79 74 72 61 63 | 65 72 20 76 65 72 73 69 | raytrac|er versi|
|000004f0| 6f 6e 20 32 2e 31 32 2e | 0d 2a 20 44 4b 42 54 72 |on 2.12.|.* DKBTr|
|00000500| 61 63 65 20 77 61 73 20 | 6f 72 69 67 69 6e 61 6c |ace was |original|
|00000510| 6c 79 20 77 72 69 74 74 | 65 6e 20 62 79 20 44 61 |ly writt|en by Da|
|00000520| 76 69 64 20 4b 2e 20 42 | 75 63 6b 2e 0d 2a 20 44 |vid K. B|uck..* D|
|00000530| 4b 42 54 72 61 63 65 20 | 56 65 72 20 32 2e 30 2d |KBTrace |Ver 2.0-|
|00000540| 32 2e 31 32 20 77 65 72 | 65 20 77 72 69 74 74 65 |2.12 wer|e writte|
|00000550| 6e 20 62 79 20 44 61 76 | 69 64 20 4b 2e 20 42 75 |n by Dav|id K. Bu|
|00000560| 63 6b 20 26 20 41 61 72 | 6f 6e 20 41 2e 20 43 6f |ck & Aar|on A. Co|
|00000570| 6c 6c 69 6e 73 2e 0d 2a | 0d 2a 2a 2a 2a 2a 2a 2a |llins..*|.*******|
|00000580| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000590| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000005a0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000005b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000005c0| 2a 2a 2a 2a 2a 2a 2f 0d | 0d 23 69 6e 63 6c 75 64 |******/.|.#includ|
|000005d0| 65 20 22 66 72 61 6d 65 | 2e 68 22 0d 23 69 6e 63 |e "frame|.h".#inc|
|000005e0| 6c 75 64 65 20 22 76 65 | 63 74 6f 72 2e 68 22 0d |lude "ve|ctor.h".|
|000005f0| 23 69 6e 63 6c 75 64 65 | 20 22 70 6f 76 70 72 6f |#include| "povpro|
|00000600| 74 6f 2e 68 22 0d 0d 4d | 45 54 48 4f 44 53 20 42 |to.h"..M|ETHODS B|
|00000610| 69 63 75 62 69 63 5f 50 | 61 74 63 68 5f 4d 65 74 |icubic_P|atch_Met|
|00000620| 68 6f 64 73 20 3d 0d 20 | 20 7b 20 0d 20 20 41 6c |hods =. | { . Al|
|00000630| 6c 5f 42 69 63 75 62 69 | 63 5f 50 61 74 63 68 5f |l_Bicubi|c_Patch_|
|00000640| 49 6e 74 65 72 73 65 63 | 74 69 6f 6e 73 2c 0d 20 |Intersec|tions,. |
|00000650| 20 49 6e 73 69 64 65 5f | 42 69 63 75 62 69 63 5f | Inside_|Bicubic_|
|00000660| 50 61 74 63 68 2c 20 42 | 69 63 75 62 69 63 5f 50 |Patch, B|icubic_P|
|00000670| 61 74 63 68 5f 4e 6f 72 | 6d 61 6c 2c 20 43 6f 70 |atch_Nor|mal, Cop|
|00000680| 79 5f 42 69 63 75 62 69 | 63 5f 50 61 74 63 68 2c |y_Bicubi|c_Patch,|
|00000690| 0d 20 20 54 72 61 6e 73 | 6c 61 74 65 5f 42 69 63 |. Trans|late_Bic|
|000006a0| 75 62 69 63 5f 50 61 74 | 63 68 2c 20 52 6f 74 61 |ubic_Pat|ch, Rota|
|000006b0| 74 65 5f 42 69 63 75 62 | 69 63 5f 50 61 74 63 68 |te_Bicub|ic_Patch|
|000006c0| 2c 0d 20 20 53 63 61 6c | 65 5f 42 69 63 75 62 69 |,. Scal|e_Bicubi|
|000006d0| 63 5f 50 61 74 63 68 2c | 20 54 72 61 6e 73 66 6f |c_Patch,| Transfo|
|000006e0| 72 6d 5f 42 69 63 75 62 | 69 63 5f 50 61 74 63 68 |rm_Bicub|ic_Patch|
|000006f0| 2c 20 49 6e 76 65 72 74 | 5f 42 69 63 75 62 69 63 |, Invert|_Bicubic|
|00000700| 5f 50 61 74 63 68 2c 0d | 20 20 44 65 73 74 72 6f |_Patch,.| Destro|
|00000710| 79 5f 42 69 63 75 62 69 | 63 5f 50 61 74 63 68 0d |y_Bicubi|c_Patch.|
|00000720| 20 20 7d 3b 0d 0d 65 78 | 74 65 72 6e 20 6c 6f 6e | };..ex|tern lon|
|00000730| 67 20 52 61 79 5f 42 69 | 63 75 62 69 63 5f 54 65 |g Ray_Bi|cubic_Te|
|00000740| 73 74 73 2c 20 52 61 79 | 5f 42 69 63 75 62 69 63 |sts, Ray|_Bicubic|
|00000750| 5f 54 65 73 74 73 5f 53 | 75 63 63 65 65 64 65 64 |_Tests_S|ucceeded|
|00000760| 3b 0d 65 78 74 65 72 6e | 20 75 6e 73 69 67 6e 65 |;.extern| unsigne|
|00000770| 64 20 69 6e 74 20 4f 70 | 74 69 6f 6e 73 3b 0d 65 |d int Op|tions;.e|
|00000780| 78 74 65 72 6e 20 52 41 | 59 20 2a 43 4d 5f 52 61 |xtern RA|Y *CM_Ra|
|00000790| 79 3b 0d 65 78 74 65 72 | 6e 20 69 6e 74 20 53 68 |y;.exter|n int Sh|
|000007a0| 61 64 6f 77 5f 54 65 73 | 74 5f 46 6c 61 67 3b 0d |adow_Tes|t_Flag;.|
|000007b0| 0d 69 6e 74 20 6d 61 78 | 5f 64 65 70 74 68 5f 72 |.int max|_depth_r|
|000007c0| 65 61 63 68 65 64 3b 0d | 0d 73 74 61 74 69 63 20 |eached;.|.static |
|000007d0| 69 6e 74 20 49 6e 76 65 | 72 74 4d 61 74 72 69 78 |int Inve|rtMatrix|
|000007e0| 20 50 41 52 41 4d 53 28 | 28 56 45 43 54 4f 52 20 | PARAMS(|(VECTOR |
|000007f0| 69 6e 5b 33 5d 2c 20 56 | 45 43 54 4f 52 20 6f 75 |in[3], V|ECTOR ou|
|00000800| 74 5b 33 5d 29 29 3b 0d | 73 74 61 74 69 63 20 76 |t[3]));.|static v|
|00000810| 6f 69 64 20 62 65 7a 69 | 65 72 5f 76 61 6c 75 65 |oid bezi|er_value|
|00000820| 20 50 41 52 41 4d 53 28 | 28 56 45 43 54 4f 52 20 | PARAMS(|(VECTOR |
|00000830| 28 2a 43 6f 6e 74 72 6f | 6c 5f 50 6f 69 6e 74 73 |(*Contro|l_Points|
|00000840| 29 5b 34 5d 5b 34 5d 2c | 20 44 42 4c 20 75 30 2c |)[4][4],| DBL u0,|
|00000850| 20 44 42 4c 20 76 30 2c | 0d 56 45 43 54 4f 52 20 | DBL v0,|.VECTOR |
|00000860| 2a 50 2c 20 56 45 43 54 | 4f 52 20 2a 4e 29 29 3b |*P, VECT|OR *N));|
|00000870| 0d 73 74 61 74 69 63 20 | 69 6e 74 20 69 6e 74 65 |.static |int inte|
|00000880| 72 73 65 63 74 5f 73 75 | 62 70 61 74 63 68 20 50 |rsect_su|bpatch P|
|00000890| 41 52 41 4d 53 28 28 42 | 49 43 55 42 49 43 5f 50 |ARAMS((B|ICUBIC_P|
|000008a0| 41 54 43 48 20 2a 2c 20 | 52 41 59 20 2a 2c 20 56 |ATCH *, |RAY *, V|
|000008b0| 45 43 54 4f 52 20 5b 33 | 5d 2c 0d 44 42 4c 20 5b |ECTOR [3|],.DBL [|
|000008c0| 33 5d 2c 20 44 42 4c 20 | 5b 33 5d 2c 20 44 42 4c |3], DBL |[3], DBL|
|000008d0| 20 2a 2c 20 56 45 43 54 | 4f 52 20 2a 2c 20 56 45 | *, VECT|OR *, VE|
|000008e0| 43 54 4f 52 20 2a 2c 20 | 44 42 4c 20 2a 2c 20 44 |CTOR *, |DBL *, D|
|000008f0| 42 4c 20 2a 29 29 3b 0d | 73 74 61 74 69 63 20 76 |BL *));.|static v|
|00000900| 6f 69 64 20 66 69 6e 64 | 5f 61 76 65 72 61 67 65 |oid find|_average|
|00000910| 20 50 41 52 41 4d 53 28 | 28 69 6e 74 2c 20 56 45 | PARAMS(|(int, VE|
|00000920| 43 54 4f 52 20 2a 2c 20 | 56 45 43 54 4f 52 20 2a |CTOR *, |VECTOR *|
|00000930| 2c 20 44 42 4c 20 2a 29 | 29 3b 0d 73 74 61 74 69 |, DBL *)|);.stati|
|00000940| 63 20 69 6e 74 20 73 70 | 68 65 72 69 63 61 6c 5f |c int sp|herical_|
|00000950| 62 6f 75 6e 64 73 5f 63 | 68 65 63 6b 20 50 41 52 |bounds_c|heck PAR|
|00000960| 41 4d 53 28 28 52 41 59 | 20 2a 2c 20 56 45 43 54 |AMS((RAY| *, VECT|
|00000970| 4f 52 20 2a 2c 20 44 42 | 4c 29 29 3b 0d 73 74 61 |OR *, DB|L));.sta|
|00000980| 74 69 63 20 69 6e 74 20 | 69 6e 74 65 72 73 65 63 |tic int |intersec|
|00000990| 74 5f 62 69 63 75 62 69 | 63 5f 70 61 74 63 68 30 |t_bicubi|c_patch0|
|000009a0| 20 50 41 52 41 4d 53 28 | 28 52 41 59 20 2a 2c 20 | PARAMS(|(RAY *, |
|000009b0| 42 49 43 55 42 49 43 5f | 50 41 54 43 48 20 2a 2c |BICUBIC_|PATCH *,|
|000009c0| 20 49 53 54 41 43 4b 20 | 2a 29 29 3b 0d 73 74 61 | ISTACK |*));.sta|
|000009d0| 74 69 63 20 44 42 4c 20 | 70 6f 69 6e 74 5f 70 6c |tic DBL |point_pl|
|000009e0| 61 6e 65 5f 64 69 73 74 | 61 6e 63 65 20 50 41 52 |ane_dist|ance PAR|
|000009f0| 41 4d 53 28 28 56 45 43 | 54 4f 52 20 2a 2c 20 56 |AMS((VEC|TOR *, V|
|00000a00| 45 43 54 4f 52 20 2a 2c | 20 44 42 4c 20 2a 29 29 |ECTOR *,| DBL *))|
|00000a10| 3b 0d 73 74 61 74 69 63 | 20 44 42 4c 20 64 65 74 |;.static| DBL det|
|00000a20| 65 72 6d 69 6e 65 5f 73 | 75 62 70 61 74 63 68 5f |ermine_s|ubpatch_|
|00000a30| 66 6c 61 74 6e 65 73 73 | 20 50 41 52 41 4d 53 28 |flatness| PARAMS(|
|00000a40| 28 56 45 43 54 4f 52 20 | 28 2a 29 5b 34 5d 5b 34 |(VECTOR |(*)[4][4|
|00000a50| 5d 29 29 3b 0d 73 74 61 | 74 69 63 20 69 6e 74 20 |]));.sta|tic int |
|00000a60| 66 6c 61 74 5f 65 6e 6f | 75 67 68 20 50 41 52 41 |flat_eno|ugh PARA|
|00000a70| 4d 53 28 28 42 49 43 55 | 42 49 43 5f 50 41 54 43 |MS((BICU|BIC_PATC|
|00000a80| 48 20 2a 2c 20 56 45 43 | 54 4f 52 20 28 2a 29 5b |H *, VEC|TOR (*)[|
|00000a90| 34 5d 5b 34 5d 29 29 3b | 0d 73 74 61 74 69 63 20 |4][4]));|.static |
|00000aa0| 76 6f 69 64 20 62 65 7a | 69 65 72 5f 62 6f 75 6e |void bez|ier_boun|
|00000ab0| 64 69 6e 67 5f 73 70 68 | 65 72 65 20 50 41 52 41 |ding_sph|ere PARA|
|00000ac0| 4d 53 28 28 56 45 43 54 | 4f 52 20 28 2a 29 5b 34 |MS((VECT|OR (*)[4|
|00000ad0| 5d 5b 34 5d 2c 20 56 45 | 43 54 4f 52 20 2a 2c 44 |][4], VE|CTOR *,D|
|00000ae0| 42 4c 20 2a 29 29 3b 0d | 73 74 61 74 69 63 20 69 |BL *));.|static i|
|00000af0| 6e 74 20 62 65 7a 69 65 | 72 5f 73 75 62 70 61 74 |nt bezie|r_subpat|
|00000b00| 63 68 5f 69 6e 74 65 72 | 73 65 63 74 20 50 41 52 |ch_inter|sect PAR|
|00000b10| 41 4d 53 28 28 52 41 59 | 20 2a 2c 20 42 49 43 55 |AMS((RAY| *, BICU|
|00000b20| 42 49 43 5f 50 41 54 43 | 48 20 2a 2c 0d 56 45 43 |BIC_PATC|H *,.VEC|
|00000b30| 54 4f 52 20 28 2a 29 5b | 34 5d 5b 34 5d 2c 20 44 |TOR (*)[|4][4], D|
|00000b40| 42 4c 2c 20 44 42 4c 2c | 20 44 42 4c 2c 20 44 42 |BL, DBL,| DBL, DB|
|00000b50| 4c 2c 0d 49 53 54 41 43 | 4b 20 2a 29 29 3b 0d 73 |L,.ISTAC|K *));.s|
|00000b60| 74 61 74 69 63 20 76 6f | 69 64 20 62 65 7a 69 65 |tatic vo|id bezie|
|00000b70| 72 5f 73 70 6c 69 74 5f | 6c 65 66 74 5f 72 69 67 |r_split_|left_rig|
|00000b80| 68 74 20 50 41 52 41 4d | 53 28 28 56 45 43 54 4f |ht PARAM|S((VECTO|
|00000b90| 52 20 28 2a 29 5b 34 5d | 5b 34 5d 2c 56 45 43 54 |R (*)[4]|[4],VECT|
|00000ba0| 4f 52 20 28 2a 29 5b 34 | 5d 5b 34 5d 2c 0d 56 45 |OR (*)[4|][4],.VE|
|00000bb0| 43 54 4f 52 20 28 2a 29 | 5b 34 5d 5b 34 5d 29 29 |CTOR (*)|[4][4]))|
|00000bc0| 3b 0d 73 74 61 74 69 63 | 20 76 6f 69 64 20 62 65 |;.static| void be|
|00000bd0| 7a 69 65 72 5f 73 70 6c | 69 74 5f 75 70 5f 64 6f |zier_spl|it_up_do|
|00000be0| 77 6e 20 50 41 52 41 4d | 53 28 28 56 45 43 54 4f |wn PARAM|S((VECTO|
|00000bf0| 52 20 28 2a 29 5b 34 5d | 5b 34 5d 2c 20 56 45 43 |R (*)[4]|[4], VEC|
|00000c00| 54 4f 52 20 28 2a 29 5b | 34 5d 5b 34 5d 2c 0d 56 |TOR (*)[|4][4],.V|
|00000c10| 45 43 54 4f 52 20 28 2a | 29 5b 34 5d 5b 34 5d 29 |ECTOR (*|)[4][4])|
|00000c20| 29 3b 0d 73 74 61 74 69 | 63 20 69 6e 74 20 62 65 |);.stati|c int be|
|00000c30| 7a 69 65 72 5f 73 75 62 | 64 69 76 69 64 65 72 20 |zier_sub|divider |
|00000c40| 50 41 52 41 4d 53 28 28 | 52 41 59 20 2a 2c 20 42 |PARAMS((|RAY *, B|
|00000c50| 49 43 55 42 49 43 5f 50 | 41 54 43 48 20 2a 2c 56 |ICUBIC_P|ATCH *,V|
|00000c60| 45 43 54 4f 52 20 28 2a | 29 5b 34 5d 5b 34 5d 2c |ECTOR (*|)[4][4],|
|00000c70| 0d 44 42 4c 2c 20 44 42 | 4c 2c 20 44 42 4c 2c 20 |.DBL, DB|L, DBL, |
|00000c80| 44 42 4c 2c 20 69 6e 74 | 2c 20 49 53 54 41 43 4b |DBL, int|, ISTACK|
|00000c90| 20 2a 29 29 3b 0d 73 74 | 61 74 69 63 20 76 6f 69 | *));.st|atic voi|
|00000ca0| 64 20 62 65 7a 69 65 72 | 5f 74 72 65 65 5f 64 65 |d bezier|_tree_de|
|00000cb0| 6c 65 74 65 72 20 50 41 | 52 41 4d 53 28 28 42 45 |leter PA|RAMS((BE|
|00000cc0| 5a 49 45 52 5f 4e 4f 44 | 45 20 2a 4e 6f 64 65 29 |ZIER_NOD|E *Node)|
|00000cd0| 29 3b 0d 73 74 61 74 69 | 63 20 42 45 5a 49 45 52 |);.stati|c BEZIER|
|00000ce0| 5f 4e 4f 44 45 20 2a 62 | 65 7a 69 65 72 5f 74 72 |_NODE *b|ezier_tr|
|00000cf0| 65 65 5f 62 75 69 6c 64 | 65 72 20 50 41 52 41 4d |ee_build|er PARAM|
|00000d00| 53 28 28 42 49 43 55 42 | 49 43 5f 50 41 54 43 48 |S((BICUB|IC_PATCH|
|00000d10| 20 2a 4f 62 6a 65 63 74 | 2c 0d 56 45 43 54 4f 52 | *Object|,.VECTOR|
|00000d20| 28 2a 50 61 74 63 68 29 | 5b 34 5d 5b 34 5d 2c 20 |(*Patch)|[4][4], |
|00000d30| 44 42 4c 20 75 30 2c 20 | 44 42 4c 20 75 31 2c 0d |DBL u0, |DBL u1,.|
|00000d40| 44 42 4c 20 76 30 2c 20 | 44 42 4c 20 76 31 2c 20 |DBL v0, |DBL v1, |
|00000d50| 69 6e 74 20 64 65 70 74 | 68 29 29 3b 0d 73 74 61 |int dept|h));.sta|
|00000d60| 74 69 63 20 69 6e 74 20 | 62 65 7a 69 65 72 5f 74 |tic int |bezier_t|
|00000d70| 72 65 65 5f 77 61 6c 6b | 65 72 20 50 41 52 41 4d |ree_walk|er PARAM|
|00000d80| 53 28 28 52 41 59 20 2a | 2c 20 42 49 43 55 42 49 |S((RAY *|, BICUBI|
|00000d90| 43 5f 50 41 54 43 48 20 | 2a 2c 20 42 45 5a 49 45 |C_PATCH |*, BEZIE|
|00000da0| 52 5f 4e 4f 44 45 20 2a | 2c 0d 49 53 54 41 43 4b |R_NODE *|,.ISTACK|
|00000db0| 20 2a 29 29 3b 0d 73 74 | 61 74 69 63 20 42 45 5a | *));.st|atic BEZ|
|00000dc0| 49 45 52 5f 4e 4f 44 45 | 20 2a 63 72 65 61 74 65 |IER_NODE| *create|
|00000dd0| 5f 6e 65 77 5f 62 65 7a | 69 65 72 5f 6e 6f 64 65 |_new_bez|ier_node|
|00000de0| 20 50 41 52 41 4d 53 28 | 28 76 6f 69 64 29 29 3b | PARAMS(|(void));|
|00000df0| 0d 73 74 61 74 69 63 20 | 42 45 5a 49 45 52 5f 56 |.static |BEZIER_V|
|00000e00| 45 52 54 49 43 45 53 20 | 2a 63 72 65 61 74 65 5f |ERTICES |*create_|
|00000e10| 62 65 7a 69 65 72 5f 76 | 65 72 74 65 78 5f 62 6c |bezier_v|ertex_bl|
|00000e20| 6f 63 6b 20 50 41 52 41 | 4d 53 28 28 76 6f 69 64 |ock PARA|MS((void|
|00000e30| 29 29 3b 0d 73 74 61 74 | 69 63 20 42 45 5a 49 45 |));.stat|ic BEZIE|
|00000e40| 52 5f 43 48 49 4c 44 52 | 45 4e 20 2a 63 72 65 61 |R_CHILDR|EN *crea|
|00000e50| 74 65 5f 62 65 7a 69 65 | 72 5f 63 68 69 6c 64 5f |te_bezie|r_child_|
|00000e60| 62 6c 6f 63 6b 20 50 41 | 52 41 4d 53 28 28 76 6f |block PA|RAMS((vo|
|00000e70| 69 64 29 29 3b 0d 73 74 | 61 74 69 63 20 69 6e 74 |id));.st|atic int|
|00000e80| 20 73 75 62 70 61 74 63 | 68 5f 6e 6f 72 6d 61 6c | subpatc|h_normal|
|00000e90| 20 50 41 52 41 4d 53 28 | 28 56 45 43 54 4f 52 20 | PARAMS(|(VECTOR |
|00000ea0| 2a 76 31 2c 20 56 45 43 | 54 4f 52 20 2a 76 32 2c |*v1, VEC|TOR *v2,|
|00000eb0| 20 56 45 43 54 4f 52 20 | 2a 76 33 2c 0d 56 45 43 | VECTOR |*v3,.VEC|
|00000ec0| 54 4f 52 20 2a 52 65 73 | 75 6c 74 2c 20 44 42 4c |TOR *Res|ult, DBL|
|00000ed0| 20 2a 64 29 29 3b 0d 0d | 20 20 73 74 61 74 69 63 | *d));..| static|
|00000ee0| 20 44 42 4c 20 43 5b 34 | 5d 20 3d 20 7b 0d 20 20 | DBL C[4|] = {. |
|00000ef0| 31 2e 30 2c 20 33 2e 30 | 2c 20 33 2e 30 2c 20 31 |1.0, 3.0|, 3.0, 1|
|00000f00| 2e 30 0d 20 20 7d 3b 0d | 0d 23 64 65 66 69 6e 65 |.0. };.|.#define|
|00000f10| 20 42 45 5a 49 45 52 5f | 45 50 53 49 4c 4f 4e 20 | BEZIER_|EPSILON |
|00000f20| 31 2e 30 65 2d 31 30 0d | 23 64 65 66 69 6e 65 20 |1.0e-10.|#define |
|00000f30| 42 45 5a 49 45 52 5f 54 | 4f 4c 45 52 41 4e 43 45 |BEZIER_T|OLERANCE|
|00000f40| 20 31 2e 30 65 2d 35 0d | 0d 73 74 61 74 69 63 20 | 1.0e-5.|.static |
|00000f50| 42 45 5a 49 45 52 5f 4e | 4f 44 45 20 2a 63 72 65 |BEZIER_N|ODE *cre|
|00000f60| 61 74 65 5f 6e 65 77 5f | 62 65 7a 69 65 72 5f 6e |ate_new_|bezier_n|
|00000f70| 6f 64 65 28 29 0d 20 20 | 7b 0d 20 20 42 45 5a 49 |ode(). |{. BEZI|
|00000f80| 45 52 5f 4e 4f 44 45 20 | 2a 4e 6f 64 65 20 3d 20 |ER_NODE |*Node = |
|00000f90| 28 42 45 5a 49 45 52 5f | 4e 4f 44 45 20 2a 29 6d |(BEZIER_|NODE *)m|
|00000fa0| 61 6c 6c 6f 63 28 73 69 | 7a 65 6f 66 28 42 45 5a |alloc(si|zeof(BEZ|
|00000fb0| 49 45 52 5f 4e 4f 44 45 | 29 29 3b 0d 20 20 69 66 |IER_NODE|));. if|
|00000fc0| 20 28 4e 6f 64 65 20 3d | 3d 20 4e 55 4c 4c 29 20 | (Node =|= NULL) |
|00000fd0| 0d 20 20 20 20 4d 41 45 | 72 72 6f 72 28 22 62 65 |. MAE|rror("be|
|00000fe0| 7a 69 65 72 20 6e 6f 64 | 65 22 29 3b 0d 20 20 4e |zier nod|e");. N|
|00000ff0| 6f 64 65 2d 3e 44 61 74 | 61 5f 50 74 72 20 3d 20 |ode->Dat|a_Ptr = |
|00001000| 4e 55 4c 4c 3b 0d 20 20 | 72 65 74 75 72 6e 20 4e |NULL;. |return N|
|00001010| 6f 64 65 3b 0d 20 20 7d | 0d 0d 73 74 61 74 69 63 |ode;. }|..static|
|00001020| 20 42 45 5a 49 45 52 5f | 56 45 52 54 49 43 45 53 | BEZIER_|VERTICES|
|00001030| 20 2a 63 72 65 61 74 65 | 5f 62 65 7a 69 65 72 5f | *create|_bezier_|
|00001040| 76 65 72 74 65 78 5f 62 | 6c 6f 63 6b 28 29 0d 20 |vertex_b|lock(). |
|00001050| 20 7b 0d 20 20 42 45 5a | 49 45 52 5f 56 45 52 54 | {. BEZ|IER_VERT|
|00001060| 49 43 45 53 20 2a 56 65 | 72 74 69 63 65 73 20 3d |ICES *Ve|rtices =|
|00001070| 20 28 42 45 5a 49 45 52 | 5f 56 45 52 54 49 43 45 | (BEZIER|_VERTICE|
|00001080| 53 20 2a 29 6d 61 6c 6c | 6f 63 28 73 69 7a 65 6f |S *)mall|oc(sizeo|
|00001090| 66 28 42 45 5a 49 45 52 | 5f 56 45 52 54 49 43 45 |f(BEZIER|_VERTICE|
|000010a0| 53 29 29 3b 0d 20 20 69 | 66 20 28 56 65 72 74 69 |S));. i|f (Verti|
|000010b0| 63 65 73 20 3d 3d 20 4e | 55 4c 4c 29 20 0d 20 20 |ces == N|ULL) . |
|000010c0| 20 20 4d 41 45 72 72 6f | 72 28 22 62 65 7a 69 65 | MAErro|r("bezie|
|000010d0| 72 20 76 65 72 74 69 63 | 65 73 22 29 3b 0d 20 20 |r vertic|es");. |
|000010e0| 72 65 74 75 72 6e 20 56 | 65 72 74 69 63 65 73 3b |return V|ertices;|
|000010f0| 0d 20 20 7d 0d 0d 73 74 | 61 74 69 63 20 42 45 5a |. }..st|atic BEZ|
|00001100| 49 45 52 5f 43 48 49 4c | 44 52 45 4e 20 2a 63 72 |IER_CHIL|DREN *cr|
|00001110| 65 61 74 65 5f 62 65 7a | 69 65 72 5f 63 68 69 6c |eate_bez|ier_chil|
|00001120| 64 5f 62 6c 6f 63 6b 28 | 29 0d 20 20 7b 0d 20 20 |d_block(|). {. |
|00001130| 42 45 5a 49 45 52 5f 43 | 48 49 4c 44 52 45 4e 20 |BEZIER_C|HILDREN |
|00001140| 2a 43 68 69 6c 64 72 65 | 6e 20 3d 20 28 42 45 5a |*Childre|n = (BEZ|
|00001150| 49 45 52 5f 43 48 49 4c | 44 52 45 4e 20 2a 29 6d |IER_CHIL|DREN *)m|
|00001160| 61 6c 6c 6f 63 28 73 69 | 7a 65 6f 66 28 42 45 5a |alloc(si|zeof(BEZ|
|00001170| 49 45 52 5f 43 48 49 4c | 44 52 45 4e 29 29 3b 0d |IER_CHIL|DREN));.|
|00001180| 20 20 69 66 20 28 43 68 | 69 6c 64 72 65 6e 20 3d | if (Ch|ildren =|
|00001190| 3d 20 4e 55 4c 4c 29 20 | 0d 20 20 20 20 4d 41 45 |= NULL) |. MAE|
|000011a0| 72 72 6f 72 28 22 62 65 | 7a 69 65 72 20 63 68 69 |rror("be|zier chi|
|000011b0| 6c 64 72 65 6e 22 29 3b | 0d 20 20 72 65 74 75 72 |ldren");|. retur|
|000011c0| 6e 20 43 68 69 6c 64 72 | 65 6e 3b 0d 20 20 7d 0d |n Childr|en;. }.|
|000011d0| 0d 73 74 61 74 69 63 20 | 42 45 5a 49 45 52 5f 4e |.static |BEZIER_N|
|000011e0| 4f 44 45 20 2a 62 65 7a | 69 65 72 5f 74 72 65 65 |ODE *bez|ier_tree|
|000011f0| 5f 62 75 69 6c 64 65 72 | 28 4f 62 6a 65 63 74 2c |_builder|(Object,|
|00001200| 20 50 61 74 63 68 2c 20 | 75 30 2c 20 75 31 2c 20 | Patch, |u0, u1, |
|00001210| 76 30 2c 20 76 31 2c 20 | 64 65 70 74 68 29 0d 42 |v0, v1, |depth).B|
|00001220| 49 43 55 42 49 43 5f 50 | 41 54 43 48 20 2a 4f 62 |ICUBIC_P|ATCH *Ob|
|00001230| 6a 65 63 74 3b 0d 56 45 | 43 54 4f 52 20 28 2a 50 |ject;.VE|CTOR (*P|
|00001240| 61 74 63 68 29 5b 34 5d | 5b 34 5d 3b 0d 44 42 4c |atch)[4]|[4];.DBL|
|00001250| 20 75 30 2c 20 75 31 2c | 20 76 30 2c 20 76 31 3b | u0, u1,| v0, v1;|
|00001260| 0d 69 6e 74 20 64 65 70 | 74 68 3b 0d 20 20 7b 0d |.int dep|th;. {.|
|00001270| 20 20 56 45 43 54 4f 52 | 20 4c 6f 77 65 72 5f 4c | VECTOR| Lower_L|
|00001280| 65 66 74 5b 34 5d 5b 34 | 5d 2c 20 4c 6f 77 65 72 |eft[4][4|], Lower|
|00001290| 5f 52 69 67 68 74 5b 34 | 5d 5b 34 5d 3b 0d 20 20 |_Right[4|][4];. |
|000012a0| 56 45 43 54 4f 52 20 55 | 70 70 65 72 5f 4c 65 66 |VECTOR U|pper_Lef|
|000012b0| 74 5b 34 5d 5b 34 5d 2c | 20 55 70 70 65 72 5f 52 |t[4][4],| Upper_R|
|000012c0| 69 67 68 74 5b 34 5d 5b | 34 5d 3b 0d 20 20 42 45 |ight[4][|4];. BE|
|000012d0| 5a 49 45 52 5f 43 48 49 | 4c 44 52 45 4e 20 2a 43 |ZIER_CHI|LDREN *C|
|000012e0| 68 69 6c 64 72 65 6e 3b | 0d 20 20 42 45 5a 49 45 |hildren;|. BEZIE|
|000012f0| 52 5f 56 45 52 54 49 43 | 45 53 20 2a 56 65 72 74 |R_VERTIC|ES *Vert|
|00001300| 69 63 65 73 3b 0d 20 20 | 42 45 5a 49 45 52 5f 4e |ices;. |BEZIER_N|
|00001310| 4f 44 45 20 2a 4e 6f 64 | 65 20 3d 20 63 72 65 61 |ODE *Nod|e = crea|
|00001320| 74 65 5f 6e 65 77 5f 62 | 65 7a 69 65 72 5f 6e 6f |te_new_b|ezier_no|
|00001330| 64 65 28 29 3b 0d 0d 20 | 20 69 66 20 28 64 65 70 |de();.. | if (dep|
|00001340| 74 68 20 3e 20 6d 61 78 | 5f 64 65 70 74 68 5f 72 |th > max|_depth_r|
|00001350| 65 61 63 68 65 64 29 20 | 6d 61 78 5f 64 65 70 74 |eached) |max_dept|
|00001360| 68 5f 72 65 61 63 68 65 | 64 20 3d 20 64 65 70 74 |h_reache|d = dept|
|00001370| 68 3b 0d 0d 20 20 2f 2a | 20 42 75 69 6c 64 20 74 |h;.. /*| Build t|
|00001380| 68 65 20 62 6f 75 6e 64 | 69 6e 67 20 73 70 68 65 |he bound|ing sphe|
|00001390| 72 65 20 66 6f 72 20 74 | 68 69 73 20 73 75 62 70 |re for t|his subp|
|000013a0| 61 74 63 68 20 2a 2f 0d | 20 20 62 65 7a 69 65 72 |atch */.| bezier|
|000013b0| 5f 62 6f 75 6e 64 69 6e | 67 5f 73 70 68 65 72 65 |_boundin|g_sphere|
|000013c0| 28 50 61 74 63 68 2c 20 | 26 28 4e 6f 64 65 2d 3e |(Patch, |&(Node->|
|000013d0| 43 65 6e 74 65 72 29 2c | 20 26 28 4e 6f 64 65 2d |Center),| &(Node-|
|000013e0| 3e 52 61 64 69 75 73 5f | 53 71 75 61 72 65 64 29 |>Radius_|Squared)|
|000013f0| 29 3b 0d 0d 20 20 2f 2a | 20 49 66 20 74 68 65 20 |);.. /*| If the |
|00001400| 70 61 74 63 68 20 69 73 | 20 63 6c 6f 73 65 20 74 |patch is| close t|
|00001410| 6f 20 62 65 69 6e 67 20 | 66 6c 61 74 2c 20 74 68 |o being |flat, th|
|00001420| 65 6e 20 6a 75 73 74 20 | 70 65 72 66 6f 72 6d 20 |en just |perform |
|00001430| 61 20 72 61 79 2d 70 6c | 61 6e 65 0d 20 20 20 20 |a ray-pl|ane. |
|00001440| 20 20 69 6e 74 65 72 73 | 65 63 74 69 6f 6e 20 74 | inters|ection t|
|00001450| 65 73 74 2e 20 2a 2f 0d | 20 20 69 66 20 28 66 6c |est. */.| if (fl|
|00001460| 61 74 5f 65 6e 6f 75 67 | 68 28 4f 62 6a 65 63 74 |at_enoug|h(Object|
|00001470| 2c 20 50 61 74 63 68 29 | 29 20 0d 20 20 20 20 7b |, Patch)|) . {|
|00001480| 0d 20 20 20 20 2f 2a 20 | 54 68 65 20 70 61 74 63 |. /* |The patc|
|00001490| 68 20 69 73 20 6e 6f 77 | 20 66 6c 61 74 20 65 6e |h is now| flat en|
|000014a0| 6f 75 67 68 20 74 6f 20 | 73 69 6d 70 6c 79 20 73 |ough to |simply s|
|000014b0| 74 6f 72 65 20 74 68 65 | 20 63 6f 72 6e 65 72 73 |tore the| corners|
|000014c0| 20 2a 2f 0d 20 20 20 20 | 4e 6f 64 65 2d 3e 4e 6f | */. |Node->No|
|000014d0| 64 65 5f 54 79 70 65 20 | 3d 20 42 45 5a 49 45 52 |de_Type |= BEZIER|
|000014e0| 5f 4c 45 41 46 5f 4e 4f | 44 45 3b 0d 20 20 20 20 |_LEAF_NO|DE;. |
|000014f0| 56 65 72 74 69 63 65 73 | 20 3d 20 63 72 65 61 74 |Vertices| = creat|
|00001500| 65 5f 62 65 7a 69 65 72 | 5f 76 65 72 74 65 78 5f |e_bezier|_vertex_|
|00001510| 62 6c 6f 63 6b 28 29 3b | 0d 20 20 20 20 56 65 72 |block();|. Ver|
|00001520| 74 69 63 65 73 2d 3e 56 | 65 72 74 69 63 65 73 5b |tices->V|ertices[|
|00001530| 30 5d 20 3d 20 28 2a 50 | 61 74 63 68 29 5b 30 5d |0] = (*P|atch)[0]|
|00001540| 5b 30 5d 3b 0d 20 20 20 | 20 56 65 72 74 69 63 65 |[0];. | Vertice|
|00001550| 73 2d 3e 56 65 72 74 69 | 63 65 73 5b 31 5d 20 3d |s->Verti|ces[1] =|
|00001560| 20 28 2a 50 61 74 63 68 | 29 5b 30 5d 5b 33 5d 3b | (*Patch|)[0][3];|
|00001570| 0d 20 20 20 20 56 65 72 | 74 69 63 65 73 2d 3e 56 |. Ver|tices->V|
|00001580| 65 72 74 69 63 65 73 5b | 32 5d 20 3d 20 28 2a 50 |ertices[|2] = (*P|
|00001590| 61 74 63 68 29 5b 33 5d | 5b 33 5d 3b 0d 20 20 20 |atch)[3]|[3];. |
|000015a0| 20 56 65 72 74 69 63 65 | 73 2d 3e 56 65 72 74 69 | Vertice|s->Verti|
|000015b0| 63 65 73 5b 33 5d 20 3d | 20 28 2a 50 61 74 63 68 |ces[3] =| (*Patch|
|000015c0| 29 5b 33 5d 5b 30 5d 3b | 0d 20 20 20 20 56 65 72 |)[3][0];|. Ver|
|000015d0| 74 69 63 65 73 2d 3e 75 | 76 62 6e 64 73 5b 30 5d |tices->u|vbnds[0]|
|000015e0| 20 3d 20 75 30 3b 0d 20 | 20 20 20 56 65 72 74 69 | = u0;. | Verti|
|000015f0| 63 65 73 2d 3e 75 76 62 | 6e 64 73 5b 31 5d 20 3d |ces->uvb|nds[1] =|
|00001600| 20 75 31 3b 0d 20 20 20 | 20 56 65 72 74 69 63 65 | u1;. | Vertice|
|00001610| 73 2d 3e 75 76 62 6e 64 | 73 5b 32 5d 20 3d 20 76 |s->uvbnd|s[2] = v|
|00001620| 30 3b 0d 20 20 20 20 56 | 65 72 74 69 63 65 73 2d |0;. V|ertices-|
|00001630| 3e 75 76 62 6e 64 73 5b | 33 5d 20 3d 20 76 31 3b |>uvbnds[|3] = v1;|
|00001640| 0d 20 20 20 20 4e 6f 64 | 65 2d 3e 44 61 74 61 5f |. Nod|e->Data_|
|00001650| 50 74 72 20 3d 20 28 76 | 6f 69 64 20 2a 29 56 65 |Ptr = (v|oid *)Ve|
|00001660| 72 74 69 63 65 73 3b 0d | 20 20 20 20 7d 0d 20 20 |rtices;.| }. |
|00001670| 65 6c 73 65 20 69 66 20 | 28 64 65 70 74 68 20 3e |else if |(depth >|
|00001680| 3d 20 4f 62 6a 65 63 74 | 2d 3e 55 5f 53 74 65 70 |= Object|->U_Step|
|00001690| 73 29 0d 20 20 20 20 69 | 66 20 28 64 65 70 74 68 |s). i|f (depth|
|000016a0| 20 3e 3d 20 4f 62 6a 65 | 63 74 2d 3e 56 5f 53 74 | >= Obje|ct->V_St|
|000016b0| 65 70 73 29 20 0d 20 20 | 20 20 20 20 7b 0d 20 20 |eps) . | {. |
|000016c0| 20 20 20 20 2f 2a 20 57 | 65 20 61 72 65 20 61 74 | /* W|e are at|
|000016d0| 20 74 68 65 20 6d 61 78 | 20 72 65 63 75 72 73 69 | the max| recursi|
|000016e0| 6f 6e 20 64 65 70 74 68 | 2e 20 4a 75 73 74 20 73 |on depth|. Just s|
|000016f0| 74 6f 72 65 20 63 6f 72 | 6e 65 72 73 2e 20 2a 2f |tore cor|ners. */|
|00001700| 0d 20 20 20 20 20 20 4e | 6f 64 65 2d 3e 4e 6f 64 |. N|ode->Nod|
|00001710| 65 5f 54 79 70 65 20 3d | 20 42 45 5a 49 45 52 5f |e_Type =| BEZIER_|
|00001720| 4c 45 41 46 5f 4e 4f 44 | 45 3b 0d 20 20 20 20 20 |LEAF_NOD|E;. |
|00001730| 20 56 65 72 74 69 63 65 | 73 20 3d 20 63 72 65 61 | Vertice|s = crea|
|00001740| 74 65 5f 62 65 7a 69 65 | 72 5f 76 65 72 74 65 78 |te_bezie|r_vertex|
|00001750| 5f 62 6c 6f 63 6b 28 29 | 3b 0d 20 20 20 20 20 20 |_block()|;. |
|00001760| 56 65 72 74 69 63 65 73 | 2d 3e 56 65 72 74 69 63 |Vertices|->Vertic|
|00001770| 65 73 5b 30 5d 20 3d 20 | 28 2a 50 61 74 63 68 29 |es[0] = |(*Patch)|
|00001780| 5b 30 5d 5b 30 5d 3b 0d | 20 20 20 20 20 20 56 65 |[0][0];.| Ve|
|00001790| 72 74 69 63 65 73 2d 3e | 56 65 72 74 69 63 65 73 |rtices->|Vertices|
|000017a0| 5b 31 5d 20 3d 20 28 2a | 50 61 74 63 68 29 5b 30 |[1] = (*|Patch)[0|
|000017b0| 5d 5b 33 5d 3b 0d 20 20 | 20 20 20 20 56 65 72 74 |][3];. | Vert|
|000017c0| 69 63 65 73 2d 3e 56 65 | 72 74 69 63 65 73 5b 32 |ices->Ve|rtices[2|
|000017d0| 5d 20 3d 20 28 2a 50 61 | 74 63 68 29 5b 33 5d 5b |] = (*Pa|tch)[3][|
|000017e0| 33 5d 3b 0d 20 20 20 20 | 20 20 56 65 72 74 69 63 |3];. | Vertic|
|000017f0| 65 73 2d 3e 56 65 72 74 | 69 63 65 73 5b 33 5d 20 |es->Vert|ices[3] |
|00001800| 3d 20 28 2a 50 61 74 63 | 68 29 5b 33 5d 5b 30 5d |= (*Patc|h)[3][0]|
|00001810| 3b 0d 20 20 20 20 20 20 | 56 65 72 74 69 63 65 73 |;. |Vertices|
|00001820| 2d 3e 75 76 62 6e 64 73 | 5b 30 5d 20 3d 20 75 30 |->uvbnds|[0] = u0|
|00001830| 3b 0d 20 20 20 20 20 20 | 56 65 72 74 69 63 65 73 |;. |Vertices|
|00001840| 2d 3e 75 76 62 6e 64 73 | 5b 31 5d 20 3d 20 75 31 |->uvbnds|[1] = u1|
|00001850| 3b 0d 20 20 20 20 20 20 | 56 65 72 74 69 63 65 73 |;. |Vertices|
|00001860| 2d 3e 75 76 62 6e 64 73 | 5b 32 5d 20 3d 20 76 30 |->uvbnds|[2] = v0|
|00001870| 3b 0d 20 20 20 20 20 20 | 56 65 72 74 69 63 65 73 |;. |Vertices|
|00001880| 2d 3e 75 76 62 6e 64 73 | 5b 33 5d 20 3d 20 76 31 |->uvbnds|[3] = v1|
|00001890| 3b 0d 20 20 20 20 20 20 | 4e 6f 64 65 2d 3e 44 61 |;. |Node->Da|
|000018a0| 74 61 5f 50 74 72 20 3d | 20 28 76 6f 69 64 20 2a |ta_Ptr =| (void *|
|000018b0| 29 56 65 72 74 69 63 65 | 73 3b 0d 20 20 20 20 20 |)Vertice|s;. |
|000018c0| 20 7d 0d 20 20 20 20 65 | 6c 73 65 20 0d 20 20 20 | }. e|lse . |
|000018d0| 20 20 20 7b 0d 20 20 20 | 20 20 20 62 65 7a 69 65 | {. | bezie|
|000018e0| 72 5f 73 70 6c 69 74 5f | 75 70 5f 64 6f 77 6e 28 |r_split_|up_down(|
|000018f0| 50 61 74 63 68 2c 20 28 | 56 45 43 54 4f 52 20 28 |Patch, (|VECTOR (|
|00001900| 2a 29 5b 34 5d 5b 34 5d | 29 4c 6f 77 65 72 5f 4c |*)[4][4]|)Lower_L|
|00001910| 65 66 74 2c 0d 20 20 20 | 20 20 20 20 20 28 56 45 |eft,. | (VE|
|00001920| 43 54 4f 52 20 28 2a 29 | 5b 34 5d 5b 34 5d 29 55 |CTOR (*)|[4][4])U|
|00001930| 70 70 65 72 5f 4c 65 66 | 74 29 3b 0d 20 20 20 20 |pper_Lef|t);. |
|00001940| 20 20 4e 6f 64 65 2d 3e | 4e 6f 64 65 5f 54 79 70 | Node->|Node_Typ|
|00001950| 65 20 3d 20 42 45 5a 49 | 45 52 5f 49 4e 54 45 52 |e = BEZI|ER_INTER|
|00001960| 49 4f 52 5f 4e 4f 44 45 | 3b 0d 20 20 20 20 20 20 |IOR_NODE|;. |
|00001970| 43 68 69 6c 64 72 65 6e | 20 3d 20 63 72 65 61 74 |Children| = creat|
|00001980| 65 5f 62 65 7a 69 65 72 | 5f 63 68 69 6c 64 5f 62 |e_bezier|_child_b|
|00001990| 6c 6f 63 6b 28 29 3b 0d | 20 20 20 20 20 20 43 68 |lock();.| Ch|
|000019a0| 69 6c 64 72 65 6e 2d 3e | 43 68 69 6c 64 72 65 6e |ildren->|Children|
|000019b0| 5b 30 5d 20 3d 0d 20 20 | 20 20 20 20 62 65 7a 69 |[0] =. | bezi|
|000019c0| 65 72 5f 74 72 65 65 5f | 62 75 69 6c 64 65 72 28 |er_tree_|builder(|
|000019d0| 4f 62 6a 65 63 74 2c 20 | 28 56 45 43 54 4f 52 20 |Object, |(VECTOR |
|000019e0| 28 2a 29 5b 34 5d 5b 34 | 5d 29 4c 6f 77 65 72 5f |(*)[4][4|])Lower_|
|000019f0| 4c 65 66 74 2c 0d 20 20 | 20 20 20 20 20 20 75 30 |Left,. | u0|
|00001a00| 2c 20 75 31 2c 20 76 30 | 2c 20 28 76 30 20 2b 20 |, u1, v0|, (v0 + |
|00001a10| 76 31 29 20 2f 20 32 2e | 30 2c 20 64 65 70 74 68 |v1) / 2.|0, depth|
|00001a20| 2b 31 29 3b 0d 20 20 20 | 20 20 20 43 68 69 6c 64 |+1);. | Child|
|00001a30| 72 65 6e 2d 3e 43 68 69 | 6c 64 72 65 6e 5b 31 5d |ren->Chi|ldren[1]|
|00001a40| 20 3d 0d 20 20 20 20 20 | 20 62 65 7a 69 65 72 5f | =. | bezier_|
|00001a50| 74 72 65 65 5f 62 75 69 | 6c 64 65 72 28 4f 62 6a |tree_bui|lder(Obj|
|00001a60| 65 63 74 2c 20 28 56 45 | 43 54 4f 52 20 28 2a 29 |ect, (VE|CTOR (*)|
|00001a70| 5b 34 5d 5b 34 5d 29 55 | 70 70 65 72 5f 4c 65 66 |[4][4])U|pper_Lef|
|00001a80| 74 2c 0d 20 20 20 20 20 | 20 20 20 75 30 2c 20 75 |t,. | u0, u|
|00001a90| 31 2c 20 28 76 30 20 2b | 20 76 31 29 20 2f 20 32 |1, (v0 +| v1) / 2|
|00001aa0| 2e 30 2c 20 76 31 2c 20 | 64 65 70 74 68 2b 31 29 |.0, v1, |depth+1)|
|00001ab0| 3b 0d 20 20 20 20 20 20 | 4e 6f 64 65 2d 3e 43 6f |;. |Node->Co|
|00001ac0| 75 6e 74 20 3d 20 32 3b | 0d 20 20 20 20 20 20 4e |unt = 2;|. N|
|00001ad0| 6f 64 65 2d 3e 44 61 74 | 61 5f 50 74 72 20 3d 20 |ode->Dat|a_Ptr = |
|00001ae0| 28 76 6f 69 64 20 2a 29 | 43 68 69 6c 64 72 65 6e |(void *)|Children|
|00001af0| 3b 0d 20 20 20 20 20 20 | 7d 0d 20 20 65 6c 73 65 |;. |}. else|
|00001b00| 20 69 66 20 28 64 65 70 | 74 68 20 3e 3d 20 4f 62 | if (dep|th >= Ob|
|00001b10| 6a 65 63 74 2d 3e 56 5f | 53 74 65 70 73 29 20 0d |ject->V_|Steps) .|
|00001b20| 20 20 20 20 7b 0d 20 20 | 20 20 62 65 7a 69 65 72 | {. | bezier|
|00001b30| 5f 73 70 6c 69 74 5f 6c | 65 66 74 5f 72 69 67 68 |_split_l|eft_righ|
|00001b40| 74 28 50 61 74 63 68 2c | 20 28 56 45 43 54 4f 52 |t(Patch,| (VECTOR|
|00001b50| 20 28 2a 29 5b 34 5d 5b | 34 5d 29 4c 6f 77 65 72 | (*)[4][|4])Lower|
|00001b60| 5f 4c 65 66 74 2c 0d 20 | 20 20 20 20 20 28 56 45 |_Left,. | (VE|
|00001b70| 43 54 4f 52 20 28 2a 29 | 5b 34 5d 5b 34 5d 29 4c |CTOR (*)|[4][4])L|
|00001b80| 6f 77 65 72 5f 52 69 67 | 68 74 29 3b 0d 20 20 20 |ower_Rig|ht);. |
|00001b90| 20 4e 6f 64 65 2d 3e 4e | 6f 64 65 5f 54 79 70 65 | Node->N|ode_Type|
|00001ba0| 20 3d 20 42 45 5a 49 45 | 52 5f 49 4e 54 45 52 49 | = BEZIE|R_INTERI|
|00001bb0| 4f 52 5f 4e 4f 44 45 3b | 0d 20 20 20 20 43 68 69 |OR_NODE;|. Chi|
|00001bc0| 6c 64 72 65 6e 20 3d 20 | 63 72 65 61 74 65 5f 62 |ldren = |create_b|
|00001bd0| 65 7a 69 65 72 5f 63 68 | 69 6c 64 5f 62 6c 6f 63 |ezier_ch|ild_bloc|
|00001be0| 6b 28 29 3b 0d 20 20 20 | 20 43 68 69 6c 64 72 65 |k();. | Childre|
|00001bf0| 6e 2d 3e 43 68 69 6c 64 | 72 65 6e 5b 30 5d 20 3d |n->Child|ren[0] =|
|00001c00| 0d 20 20 20 20 62 65 7a | 69 65 72 5f 74 72 65 65 |. bez|ier_tree|
|00001c10| 5f 62 75 69 6c 64 65 72 | 28 4f 62 6a 65 63 74 2c |_builder|(Object,|
|00001c20| 20 28 56 45 43 54 4f 52 | 20 28 2a 29 5b 34 5d 5b | (VECTOR| (*)[4][|
|00001c30| 34 5d 29 4c 6f 77 65 72 | 5f 4c 65 66 74 2c 0d 20 |4])Lower|_Left,. |
|00001c40| 20 20 20 20 20 75 30 2c | 20 28 75 30 20 2b 20 75 | u0,| (u0 + u|
|00001c50| 31 29 20 2f 20 32 2e 30 | 2c 20 76 30 2c 20 76 31 |1) / 2.0|, v0, v1|
|00001c60| 2c 20 64 65 70 74 68 2b | 31 29 3b 0d 20 20 20 20 |, depth+|1);. |
|00001c70| 43 68 69 6c 64 72 65 6e | 2d 3e 43 68 69 6c 64 72 |Children|->Childr|
|00001c80| 65 6e 5b 31 5d 20 3d 0d | 20 20 20 20 62 65 7a 69 |en[1] =.| bezi|
|00001c90| 65 72 5f 74 72 65 65 5f | 62 75 69 6c 64 65 72 28 |er_tree_|builder(|
|00001ca0| 4f 62 6a 65 63 74 2c 20 | 28 56 45 43 54 4f 52 20 |Object, |(VECTOR |
|00001cb0| 28 2a 29 5b 34 5d 5b 34 | 5d 29 4c 6f 77 65 72 5f |(*)[4][4|])Lower_|
|00001cc0| 52 69 67 68 74 2c 0d 20 | 20 20 20 20 20 28 75 30 |Right,. | (u0|
|00001cd0| 20 2b 20 75 31 29 20 2f | 20 32 2e 30 2c 20 75 31 | + u1) /| 2.0, u1|
|00001ce0| 2c 20 76 30 2c 20 76 31 | 2c 20 64 65 70 74 68 2b |, v0, v1|, depth+|
|00001cf0| 31 29 3b 0d 20 20 20 20 | 4e 6f 64 65 2d 3e 43 6f |1);. |Node->Co|
|00001d00| 75 6e 74 20 3d 20 32 3b | 0d 20 20 20 20 4e 6f 64 |unt = 2;|. Nod|
|00001d10| 65 2d 3e 44 61 74 61 5f | 50 74 72 20 3d 20 28 76 |e->Data_|Ptr = (v|
|00001d20| 6f 69 64 20 2a 29 43 68 | 69 6c 64 72 65 6e 3b 0d |oid *)Ch|ildren;.|
|00001d30| 20 20 20 20 7d 0d 20 20 | 65 6c 73 65 20 0d 20 20 | }. |else . |
|00001d40| 20 20 7b 0d 20 20 20 20 | 62 65 7a 69 65 72 5f 73 | {. |bezier_s|
|00001d50| 70 6c 69 74 5f 6c 65 66 | 74 5f 72 69 67 68 74 28 |plit_lef|t_right(|
|00001d60| 50 61 74 63 68 2c 20 28 | 56 45 43 54 4f 52 20 28 |Patch, (|VECTOR (|
|00001d70| 2a 29 5b 34 5d 5b 34 5d | 29 4c 6f 77 65 72 5f 4c |*)[4][4]|)Lower_L|
|00001d80| 65 66 74 2c 0d 20 20 20 | 20 20 20 28 56 45 43 54 |eft,. | (VECT|
|00001d90| 4f 52 20 28 2a 29 5b 34 | 5d 5b 34 5d 29 4c 6f 77 |OR (*)[4|][4])Low|
|00001da0| 65 72 5f 52 69 67 68 74 | 29 3b 0d 20 20 20 20 62 |er_Right|);. b|
|00001db0| 65 7a 69 65 72 5f 73 70 | 6c 69 74 5f 75 70 5f 64 |ezier_sp|lit_up_d|
|00001dc0| 6f 77 6e 28 28 56 45 43 | 54 4f 52 20 28 2a 29 5b |own((VEC|TOR (*)[|
|00001dd0| 34 5d 5b 34 5d 29 4c 6f | 77 65 72 5f 4c 65 66 74 |4][4])Lo|wer_Left|
|00001de0| 2c 0d 20 20 20 20 20 20 | 28 56 45 43 54 4f 52 20 |,. |(VECTOR |
|00001df0| 28 2a 29 5b 34 5d 5b 34 | 5d 29 4c 6f 77 65 72 5f |(*)[4][4|])Lower_|
|00001e00| 4c 65 66 74 2c 0d 20 20 | 20 20 20 20 28 56 45 43 |Left,. | (VEC|
|00001e10| 54 4f 52 20 28 2a 29 5b | 34 5d 5b 34 5d 29 55 70 |TOR (*)[|4][4])Up|
|00001e20| 70 65 72 5f 4c 65 66 74 | 29 3b 0d 20 20 20 20 62 |per_Left|);. b|
|00001e30| 65 7a 69 65 72 5f 73 70 | 6c 69 74 5f 75 70 5f 64 |ezier_sp|lit_up_d|
|00001e40| 6f 77 6e 28 28 56 45 43 | 54 4f 52 20 28 2a 29 5b |own((VEC|TOR (*)[|
|00001e50| 34 5d 5b 34 5d 29 4c 6f | 77 65 72 5f 52 69 67 68 |4][4])Lo|wer_Righ|
|00001e60| 74 2c 0d 20 20 20 20 20 | 20 28 56 45 43 54 4f 52 |t,. | (VECTOR|
|00001e70| 20 28 2a 29 5b 34 5d 5b | 34 5d 29 4c 6f 77 65 72 | (*)[4][|4])Lower|
|00001e80| 5f 52 69 67 68 74 2c 0d | 20 20 20 20 20 20 28 56 |_Right,.| (V|
|00001e90| 45 43 54 4f 52 20 28 2a | 29 5b 34 5d 5b 34 5d 29 |ECTOR (*|)[4][4])|
|00001ea0| 55 70 70 65 72 5f 52 69 | 67 68 74 29 3b 0d 20 20 |Upper_Ri|ght);. |
|00001eb0| 20 20 4e 6f 64 65 2d 3e | 4e 6f 64 65 5f 54 79 70 | Node->|Node_Typ|
|00001ec0| 65 20 3d 20 42 45 5a 49 | 45 52 5f 49 4e 54 45 52 |e = BEZI|ER_INTER|
|00001ed0| 49 4f 52 5f 4e 4f 44 45 | 3b 0d 20 20 20 20 43 68 |IOR_NODE|;. Ch|
|00001ee0| 69 6c 64 72 65 6e 20 3d | 20 63 72 65 61 74 65 5f |ildren =| create_|
|00001ef0| 62 65 7a 69 65 72 5f 63 | 68 69 6c 64 5f 62 6c 6f |bezier_c|hild_blo|
|00001f00| 63 6b 28 29 3b 0d 20 20 | 20 20 43 68 69 6c 64 72 |ck();. | Childr|
|00001f10| 65 6e 2d 3e 43 68 69 6c | 64 72 65 6e 5b 30 5d 20 |en->Chil|dren[0] |
|00001f20| 3d 0d 20 20 20 20 62 65 | 7a 69 65 72 5f 74 72 65 |=. be|zier_tre|
|00001f30| 65 5f 62 75 69 6c 64 65 | 72 28 4f 62 6a 65 63 74 |e_builde|r(Object|
|00001f40| 2c 20 28 56 45 43 54 4f | 52 20 28 2a 29 5b 34 5d |, (VECTO|R (*)[4]|
|00001f50| 5b 34 5d 29 4c 6f 77 65 | 72 5f 4c 65 66 74 2c 0d |[4])Lowe|r_Left,.|
|00001f60| 20 20 20 20 20 20 75 30 | 2c 20 28 75 30 20 2b 20 | u0|, (u0 + |
|00001f70| 75 31 29 20 2f 20 32 2e | 30 2c 20 76 30 2c 20 28 |u1) / 2.|0, v0, (|
|00001f80| 76 30 20 2b 20 76 31 29 | 20 2f 20 32 2e 30 2c 20 |v0 + v1)| / 2.0, |
|00001f90| 64 65 70 74 68 2b 31 29 | 3b 0d 20 20 20 20 43 68 |depth+1)|;. Ch|
|00001fa0| 69 6c 64 72 65 6e 2d 3e | 43 68 69 6c 64 72 65 6e |ildren->|Children|
|00001fb0| 5b 31 5d 20 3d 0d 20 20 | 20 20 62 65 7a 69 65 72 |[1] =. | bezier|
|00001fc0| 5f 74 72 65 65 5f 62 75 | 69 6c 64 65 72 28 4f 62 |_tree_bu|ilder(Ob|
|00001fd0| 6a 65 63 74 2c 20 28 56 | 45 43 54 4f 52 20 28 2a |ject, (V|ECTOR (*|
|00001fe0| 29 5b 34 5d 5b 34 5d 29 | 55 70 70 65 72 5f 4c 65 |)[4][4])|Upper_Le|
|00001ff0| 66 74 2c 0d 20 20 20 20 | 20 20 75 30 2c 20 28 75 |ft,. | u0, (u|
|00002000| 30 20 2b 20 75 31 29 20 | 2f 20 32 2e 30 2c 20 28 |0 + u1) |/ 2.0, (|
|00002010| 76 30 20 2b 20 76 31 29 | 20 2f 20 32 2e 30 2c 20 |v0 + v1)| / 2.0, |
|00002020| 76 31 2c 20 64 65 70 74 | 68 2b 31 29 3b 0d 20 20 |v1, dept|h+1);. |
|00002030| 20 20 43 68 69 6c 64 72 | 65 6e 2d 3e 43 68 69 6c | Childr|en->Chil|
|00002040| 64 72 65 6e 5b 32 5d 20 | 3d 0d 20 20 20 20 62 65 |dren[2] |=. be|
|00002050| 7a 69 65 72 5f 74 72 65 | 65 5f 62 75 69 6c 64 65 |zier_tre|e_builde|
|00002060| 72 28 4f 62 6a 65 63 74 | 2c 20 28 56 45 43 54 4f |r(Object|, (VECTO|
|00002070| 52 20 28 2a 29 5b 34 5d | 5b 34 5d 29 4c 6f 77 65 |R (*)[4]|[4])Lowe|
|00002080| 72 5f 52 69 67 68 74 2c | 0d 20 20 20 20 20 20 28 |r_Right,|. (|
|00002090| 75 30 20 2b 20 75 31 29 | 20 2f 20 32 2e 30 2c 20 |u0 + u1)| / 2.0, |
|000020a0| 75 31 2c 20 76 30 2c 20 | 28 76 30 20 2b 20 76 31 |u1, v0, |(v0 + v1|
|000020b0| 29 20 2f 20 32 2e 30 2c | 20 64 65 70 74 68 2b 31 |) / 2.0,| depth+1|
|000020c0| 29 3b 0d 20 20 20 20 43 | 68 69 6c 64 72 65 6e 2d |);. C|hildren-|
|000020d0| 3e 43 68 69 6c 64 72 65 | 6e 5b 33 5d 20 3d 0d 20 |>Childre|n[3] =. |
|000020e0| 20 20 20 62 65 7a 69 65 | 72 5f 74 72 65 65 5f 62 | bezie|r_tree_b|
|000020f0| 75 69 6c 64 65 72 28 4f | 62 6a 65 63 74 2c 20 28 |uilder(O|bject, (|
|00002100| 56 45 43 54 4f 52 20 28 | 2a 29 5b 34 5d 5b 34 5d |VECTOR (|*)[4][4]|
|00002110| 29 55 70 70 65 72 5f 52 | 69 67 68 74 2c 0d 20 20 |)Upper_R|ight,. |
|00002120| 20 20 20 20 28 75 30 20 | 2b 20 75 31 29 20 2f 20 | (u0 |+ u1) / |
|00002130| 32 2e 30 2c 20 75 31 2c | 20 28 76 30 20 2b 20 76 |2.0, u1,| (v0 + v|
|00002140| 31 29 20 2f 20 32 2e 30 | 2c 20 76 31 2c 20 64 65 |1) / 2.0|, v1, de|
|00002150| 70 74 68 2b 31 29 3b 0d | 20 20 20 20 4e 6f 64 65 |pth+1);.| Node|
|00002160| 2d 3e 43 6f 75 6e 74 20 | 3d 20 34 3b 0d 20 20 20 |->Count |= 4;. |
|00002170| 20 4e 6f 64 65 2d 3e 44 | 61 74 61 5f 50 74 72 20 | Node->D|ata_Ptr |
|00002180| 3d 20 28 76 6f 69 64 20 | 2a 29 43 68 69 6c 64 72 |= (void |*)Childr|
|00002190| 65 6e 3b 0d 20 20 20 20 | 7d 0d 20 20 72 65 74 75 |en;. |}. retu|
|000021a0| 72 6e 20 4e 6f 64 65 3b | 0d 20 20 7d 0d 0d 2f 2a |rn Node;|. }../*|
|000021b0| 20 44 65 74 65 72 6d 69 | 6e 65 20 74 68 65 20 70 | Determi|ne the p|
|000021c0| 6f 73 69 74 69 6f 6e 20 | 61 6e 64 20 6e 6f 72 6d |osition |and norm|
|000021d0| 61 6c 20 61 74 20 61 20 | 73 69 6e 67 6c 65 20 63 |al at a |single c|
|000021e0| 6f 6f 72 64 69 6e 61 74 | 65 20 70 6f 69 6e 74 20 |oordinat|e point |
|000021f0| 28 75 2c 20 76 29 0d 20 | 20 20 6f 6e 20 61 20 42 |(u, v). | on a B|
|00002200| 65 7a 69 65 72 20 70 61 | 74 63 68 20 2a 2f 0d 73 |ezier pa|tch */.s|
|00002210| 74 61 74 69 63 20 76 6f | 69 64 20 62 65 7a 69 65 |tatic vo|id bezie|
|00002220| 72 5f 76 61 6c 75 65 28 | 43 6f 6e 74 72 6f 6c 5f |r_value(|Control_|
|00002230| 50 6f 69 6e 74 73 2c 20 | 75 30 2c 20 76 30 2c 20 |Points, |u0, v0, |
|00002240| 50 2c 20 4e 29 0d 56 45 | 43 54 4f 52 20 28 2a 43 |P, N).VE|CTOR (*C|
|00002250| 6f 6e 74 72 6f 6c 5f 50 | 6f 69 6e 74 73 29 5b 34 |ontrol_P|oints)[4|
|00002260| 5d 5b 34 5d 3b 0d 44 42 | 4c 20 75 30 2c 20 76 30 |][4];.DB|L u0, v0|
|00002270| 3b 0d 56 45 43 54 4f 52 | 20 2a 50 2c 20 2a 4e 3b |;.VECTOR| *P, *N;|
|00002280| 0d 20 20 7b 0d 20 20 44 | 42 4c 20 63 2c 20 74 2c |. {. D|BL c, t,|
|00002290| 20 75 74 2c 20 76 74 3b | 0d 20 20 44 42 4c 20 75 | ut, vt;|. DBL u|
|000022a0| 5b 34 5d 2c 20 75 75 5b | 34 5d 2c 20 76 5b 34 5d |[4], uu[|4], v[4]|
|000022b0| 2c 20 76 76 5b 34 5d 3b | 0d 20 20 44 42 4c 20 64 |, vv[4];|. DBL d|
|000022c0| 75 5b 34 5d 2c 20 64 75 | 75 5b 34 5d 2c 20 64 76 |u[4], du|u[4], dv|
|000022d0| 5b 34 5d 2c 20 64 76 76 | 5b 34 5d 3b 0d 20 20 69 |[4], dvv|[4];. i|
|000022e0| 6e 74 20 69 2c 20 6a 3b | 0d 20 20 56 45 43 54 4f |nt i, j;|. VECTO|
|000022f0| 52 20 55 2c 20 56 2c 20 | 54 3b 0d 0d 20 20 2f 2a |R U, V, |T;.. /*|
|00002300| 20 43 61 6c 63 75 6c 61 | 74 65 20 62 69 6e 6f 6d | Calcula|te binom|
|00002310| 69 61 6c 20 63 6f 65 66 | 66 69 63 69 65 6e 74 73 |ial coef|ficients|
|00002320| 20 74 69 6d 65 73 20 63 | 6f 6f 72 64 69 6e 61 74 | times c|oordinat|
|00002330| 65 20 70 6f 73 69 74 69 | 6f 6e 73 20 2a 2f 0d 20 |e positi|ons */. |
|00002340| 20 75 5b 30 5d 20 20 3d | 20 31 2e 30 3b 20 75 75 | u[0] =| 1.0; uu|
|00002350| 5b 30 5d 20 3d 20 31 2e | 30 3b 20 64 75 5b 30 5d |[0] = 1.|0; du[0]|
|00002360| 20 3d 20 30 2e 30 3b 20 | 64 75 75 5b 30 5d 20 3d | = 0.0; |duu[0] =|
|00002370| 20 30 2e 30 3b 0d 20 20 | 76 5b 30 5d 20 20 3d 20 | 0.0;. |v[0] = |
|00002380| 31 2e 30 3b 20 76 76 5b | 30 5d 20 3d 20 31 2e 30 |1.0; vv[|0] = 1.0|
|00002390| 3b 20 64 76 5b 30 5d 20 | 3d 20 30 2e 30 3b 20 64 |; dv[0] |= 0.0; d|
|000023a0| 76 76 5b 30 5d 20 3d 20 | 30 2e 30 3b 0d 20 20 66 |vv[0] = |0.0;. f|
|000023b0| 6f 72 20 28 69 3d 31 3b | 69 3c 34 3b 69 2b 2b 29 |or (i=1;|i<4;i++)|
|000023c0| 20 0d 20 20 20 20 7b 0d | 20 20 20 20 75 5b 69 5d | . {.| u[i]|
|000023d0| 20 20 20 3d 20 75 5b 69 | 2d 31 5d 20 2a 20 75 30 | = u[i|-1] * u0|
|000023e0| 3b 0d 20 20 20 20 75 75 | 5b 69 5d 20 20 3d 20 75 |;. uu|[i] = u|
|000023f0| 75 5b 69 2d 31 5d 20 2a | 20 28 31 2e 30 20 2d 20 |u[i-1] *| (1.0 - |
|00002400| 75 30 29 3b 0d 20 20 20 | 20 76 5b 69 5d 20 20 20 |u0);. | v[i] |
|00002410| 3d 20 76 5b 69 2d 31 5d | 20 2a 20 76 30 3b 0d 20 |= v[i-1]| * v0;. |
|00002420| 20 20 20 76 76 5b 69 5d | 20 20 3d 20 76 76 5b 69 | vv[i]| = vv[i|
|00002430| 2d 31 5d 20 2a 20 28 31 | 2e 30 20 2d 20 76 30 29 |-1] * (1|.0 - v0)|
|00002440| 3b 0d 20 20 20 20 64 75 | 5b 69 5d 20 20 3d 20 20 |;. du|[i] = |
|00002450| 69 20 2a 20 75 5b 69 2d | 31 5d 3b 0d 20 20 20 20 |i * u[i-|1];. |
|00002460| 64 75 75 5b 69 5d 20 3d | 20 2d 69 20 2a 20 75 75 |duu[i] =| -i * uu|
|00002470| 5b 69 2d 31 5d 3b 0d 20 | 20 20 20 64 76 5b 69 5d |[i-1];. | dv[i]|
|00002480| 20 20 3d 20 20 69 20 2a | 20 76 5b 69 2d 31 5d 3b | = i *| v[i-1];|
|00002490| 0d 20 20 20 20 64 76 76 | 5b 69 5d 20 3d 20 2d 69 |. dvv|[i] = -i|
|000024a0| 20 2a 20 76 76 5b 69 2d | 31 5d 3b 0d 20 20 20 20 | * vv[i-|1];. |
|000024b0| 7d 0d 0d 20 20 2f 2a 20 | 4e 6f 77 20 65 76 61 6c |}.. /* |Now eval|
|000024c0| 75 61 74 65 20 70 6f 73 | 69 74 69 6f 6e 20 61 6e |uate pos|ition an|
|000024d0| 64 20 74 61 6e 67 65 6e | 74 73 20 62 61 73 65 64 |d tangen|ts based|
|000024e0| 20 6f 6e 20 63 6f 6e 74 | 72 6f 6c 20 70 6f 69 6e | on cont|rol poin|
|000024f0| 74 73 20 2a 2f 0d 20 20 | 4d 61 6b 65 5f 56 65 63 |ts */. |Make_Vec|
|00002500| 74 6f 72 28 50 2c 20 30 | 2c 20 30 2c 20 30 29 3b |tor(P, 0|, 0, 0);|
|00002510| 0d 20 20 4d 61 6b 65 5f | 56 65 63 74 6f 72 28 26 |. Make_|Vector(&|
|00002520| 55 2c 20 30 2c 20 30 2c | 20 30 29 3b 0d 20 20 4d |U, 0, 0,| 0);. M|
|00002530| 61 6b 65 5f 56 65 63 74 | 6f 72 28 26 56 2c 20 30 |ake_Vect|or(&V, 0|
|00002540| 2c 20 30 2c 20 30 29 3b | 0d 20 20 66 6f 72 20 28 |, 0, 0);|. for (|
|00002550| 69 3d 30 3b 69 3c 34 3b | 69 2b 2b 29 0d 20 20 20 |i=0;i<4;|i++). |
|00002560| 20 66 6f 72 20 28 6a 3d | 30 3b 6a 3c 34 3b 6a 2b | for (j=|0;j<4;j+|
|00002570| 2b 29 20 0d 20 20 20 20 | 7b 0d 20 20 20 20 63 20 |+) . |{. c |
|00002580| 3d 20 43 5b 69 5d 20 2a | 20 43 5b 6a 5d 3b 0d 20 |= C[i] *| C[j];. |
|00002590| 20 20 20 75 74 20 3d 20 | 75 5b 69 5d 20 2a 20 75 | ut = |u[i] * u|
|000025a0| 75 5b 33 20 2d 20 69 5d | 3b 0d 20 20 20 20 76 74 |u[3 - i]|;. vt|
|000025b0| 20 3d 20 76 5b 6a 5d 20 | 2a 20 76 76 5b 33 20 2d | = v[j] |* vv[3 -|
|000025c0| 20 6a 5d 3b 0d 20 20 20 | 20 74 20 3d 20 63 20 2a | j];. | t = c *|
|000025d0| 20 75 74 20 2a 20 76 74 | 3b 0d 20 20 20 20 56 53 | ut * vt|;. VS|
|000025e0| 63 61 6c 65 28 54 2c 20 | 28 2a 43 6f 6e 74 72 6f |cale(T, |(*Contro|
|000025f0| 6c 5f 50 6f 69 6e 74 73 | 29 5b 69 5d 5b 6a 5d 2c |l_Points|)[i][j],|
|00002600| 20 74 29 3b 0d 20 20 20 | 20 56 41 64 64 45 71 28 | t);. | VAddEq(|
|00002610| 2a 50 2c 20 54 29 3b 0d | 20 20 20 20 74 20 3d 20 |*P, T);.| t = |
|00002620| 63 20 2a 20 76 74 20 2a | 20 28 64 75 5b 69 5d 20 |c * vt *| (du[i] |
|00002630| 2a 20 75 75 5b 33 2d 69 | 5d 20 2b 20 75 5b 69 5d |* uu[3-i|] + u[i]|
|00002640| 20 2a 20 64 75 75 5b 33 | 2d 69 5d 29 3b 0d 20 20 | * duu[3|-i]);. |
|00002650| 20 20 56 53 63 61 6c 65 | 28 54 2c 20 28 2a 43 6f | VScale|(T, (*Co|
|00002660| 6e 74 72 6f 6c 5f 50 6f | 69 6e 74 73 29 5b 69 5d |ntrol_Po|ints)[i]|
|00002670| 5b 6a 5d 2c 20 74 29 3b | 0d 20 20 20 20 56 41 64 |[j], t);|. VAd|
|00002680| 64 45 71 28 55 2c 20 54 | 29 3b 0d 20 20 20 20 74 |dEq(U, T|);. t|
|00002690| 20 3d 20 63 20 2a 20 75 | 74 20 2a 20 28 64 76 5b | = c * u|t * (dv[|
|000026a0| 6a 5d 20 2a 20 76 76 5b | 33 2d 6a 5d 20 2b 20 76 |j] * vv[|3-j] + v|
|000026b0| 5b 6a 5d 20 2a 20 64 76 | 76 5b 33 2d 6a 5d 29 3b |[j] * dv|v[3-j]);|
|000026c0| 0d 20 20 20 20 56 53 63 | 61 6c 65 28 54 2c 20 28 |. VSc|ale(T, (|
|000026d0| 2a 43 6f 6e 74 72 6f 6c | 5f 50 6f 69 6e 74 73 29 |*Control|_Points)|
|000026e0| 5b 69 5d 5b 6a 5d 2c 20 | 74 29 3b 0d 20 20 20 20 |[i][j], |t);. |
|000026f0| 56 41 64 64 45 71 28 56 | 2c 20 54 29 3b 0d 20 20 |VAddEq(V|, T);. |
|00002700| 20 20 7d 0d 0d 20 20 2f | 2a 20 4d 61 6b 65 20 74 | }.. /|* Make t|
|00002710| 68 65 20 6e 6f 72 6d 61 | 6c 20 66 72 6f 6d 20 74 |he norma|l from t|
|00002720| 68 65 20 63 72 6f 73 73 | 20 70 72 6f 64 75 63 74 |he cross| product|
|00002730| 20 6f 66 20 74 68 65 20 | 74 61 6e 67 65 6e 74 73 | of the |tangents|
|00002740| 20 2a 2f 0d 20 20 56 43 | 72 6f 73 73 28 2a 4e 2c | */. VC|ross(*N,|
|00002750| 20 55 2c 20 56 29 3b 0d | 20 20 56 44 6f 74 28 74 | U, V);.| VDot(t|
|00002760| 2c 20 2a 4e 2c 20 2a 4e | 29 3b 0d 20 20 69 66 20 |, *N, *N|);. if |
|00002770| 28 74 20 3e 20 42 45 5a | 49 45 52 5f 45 50 53 49 |(t > BEZ|IER_EPSI|
|00002780| 4c 4f 4e 29 20 0d 20 20 | 20 20 7b 0d 20 20 20 20 |LON) . | {. |
|00002790| 74 20 3d 20 31 2e 30 20 | 2f 20 73 71 72 74 28 74 |t = 1.0 |/ sqrt(t|
|000027a0| 29 3b 0d 20 20 20 20 56 | 53 63 61 6c 65 45 71 28 |);. V|ScaleEq(|
|000027b0| 2a 4e 2c 20 74 29 3b 0d | 20 20 20 20 7d 0d 20 20 |*N, t);.| }. |
|000027c0| 65 6c 73 65 0d 20 20 20 | 20 4d 61 6b 65 5f 56 65 |else. | Make_Ve|
|000027d0| 63 74 6f 72 28 4e 2c 20 | 31 2c 20 30 2c 20 30 29 |ctor(N, |1, 0, 0)|
|000027e0| 0d 20 20 20 20 20 20 7d | 0d 0d 2f 2a 20 43 61 6c |. }|../* Cal|
|000027f0| 63 75 6c 61 74 65 20 74 | 68 65 20 6e 6f 72 6d 61 |culate t|he norma|
|00002800| 6c 20 74 6f 20 61 20 73 | 75 62 70 61 74 63 68 20 |l to a s|ubpatch |
|00002810| 28 74 72 69 61 6e 67 6c | 65 29 20 72 65 74 75 72 |(triangl|e) retur|
|00002820| 6e 20 74 68 65 20 76 65 | 63 74 6f 72 0d 3c 31 2e |n the ve|ctor.<1.|
|00002830| 30 20 30 2e 30 20 30 2e | 30 3e 20 69 66 20 74 68 |0 0.0 0.|0> if th|
|00002840| 65 20 74 72 69 61 6e 67 | 6c 65 20 69 73 20 64 65 |e triang|le is de|
|00002850| 67 65 6e 65 72 61 74 65 | 2e 20 2a 2f 0d 73 74 61 |generate|. */.sta|
|00002860| 74 69 63 20 69 6e 74 20 | 73 75 62 70 61 74 63 68 |tic int |subpatch|
|00002870| 5f 6e 6f 72 6d 61 6c 28 | 76 31 2c 20 76 32 2c 20 |_normal(|v1, v2, |
|00002880| 76 33 2c 20 52 65 73 75 | 6c 74 2c 20 64 29 0d 56 |v3, Resu|lt, d).V|
|00002890| 45 43 54 4f 52 20 2a 76 | 31 2c 20 2a 76 32 2c 20 |ECTOR *v|1, *v2, |
|000028a0| 2a 76 33 2c 20 2a 52 65 | 73 75 6c 74 3b 0d 44 42 |*v3, *Re|sult;.DB|
|000028b0| 4c 20 2a 64 3b 0d 20 20 | 7b 0d 20 20 56 45 43 54 |L *d;. |{. VECT|
|000028c0| 4f 52 20 56 31 2c 20 56 | 32 3b 0d 20 20 44 42 4c |OR V1, V|2;. DBL|
|000028d0| 20 4c 65 6e 67 74 68 3b | 0d 0d 20 20 56 53 75 62 | Length;|.. VSub|
|000028e0| 28 56 31 2c 20 2a 76 31 | 2c 20 2a 76 32 29 3b 0d |(V1, *v1|, *v2);.|
|000028f0| 20 20 56 53 75 62 28 56 | 32 2c 20 2a 76 33 2c 20 | VSub(V|2, *v3, |
|00002900| 2a 76 32 29 3b 0d 20 20 | 56 43 72 6f 73 73 28 2a |*v2);. |VCross(*|
|00002910| 52 65 73 75 6c 74 2c 20 | 56 31 2c 20 56 32 29 3b |Result, |V1, V2);|
|00002920| 0d 20 20 56 4c 65 6e 67 | 74 68 28 4c 65 6e 67 74 |. VLeng|th(Lengt|
|00002930| 68 2c 20 2a 52 65 73 75 | 6c 74 29 3b 0d 20 20 69 |h, *Resu|lt);. i|
|00002940| 66 20 28 4c 65 6e 67 74 | 68 20 3c 20 42 45 5a 49 |f (Lengt|h < BEZI|
|00002950| 45 52 5f 45 50 53 49 4c | 4f 4e 29 20 0d 20 20 20 |ER_EPSIL|ON) . |
|00002960| 20 7b 0d 20 20 20 20 52 | 65 73 75 6c 74 2d 3e 78 | {. R|esult->x|
|00002970| 20 3d 20 31 2e 30 3b 0d | 20 20 20 20 52 65 73 75 | = 1.0;.| Resu|
|00002980| 6c 74 2d 3e 79 20 3d 20 | 30 2e 30 3b 0d 20 20 20 |lt->y = |0.0;. |
|00002990| 20 52 65 73 75 6c 74 2d | 3e 7a 20 3d 20 30 2e 30 | Result-|>z = 0.0|
|000029a0| 3b 0d 20 20 20 20 2a 64 | 20 3d 20 2d 31 2e 30 20 |;. *d| = -1.0 |
|000029b0| 2a 20 76 31 2d 3e 78 3b | 0d 20 20 20 20 72 65 74 |* v1->x;|. ret|
|000029c0| 75 72 6e 20 30 3b 0d 20 | 20 20 20 7d 0d 20 20 65 |urn 0;. | }. e|
|000029d0| 6c 73 65 20 0d 20 20 20 | 20 7b 0d 20 20 20 20 56 |lse . | {. V|
|000029e0| 49 6e 76 65 72 73 65 53 | 63 61 6c 65 28 2a 52 65 |InverseS|cale(*Re|
|000029f0| 73 75 6c 74 2c 20 2a 52 | 65 73 75 6c 74 2c 20 4c |sult, *R|esult, L|
|00002a00| 65 6e 67 74 68 29 3b 0d | 20 20 20 20 56 44 6f 74 |ength);.| VDot|
|00002a10| 28 2a 64 2c 20 2a 52 65 | 73 75 6c 74 2c 20 2a 76 |(*d, *Re|sult, *v|
|00002a20| 31 29 3b 0d 20 20 20 20 | 2a 64 20 3d 20 30 2e 30 |1);. |*d = 0.0|
|00002a30| 20 2d 20 2a 64 3b 0d 20 | 20 20 20 72 65 74 75 72 | - *d;. | retur|
|00002a40| 6e 20 31 3b 0d 20 20 20 | 20 7d 0d 20 20 7d 0d 0d |n 1;. | }. }..|
|00002a50| 73 74 61 74 69 63 20 69 | 6e 74 0d 49 6e 76 65 72 |static i|nt.Inver|
|00002a60| 74 4d 61 74 72 69 78 28 | 69 6e 2c 20 6f 75 74 29 |tMatrix(|in, out)|
|00002a70| 0d 56 45 43 54 4f 52 20 | 69 6e 5b 33 5d 2c 20 6f |.VECTOR |in[3], o|
|00002a80| 75 74 5b 33 5d 3b 0d 20 | 20 7b 0d 20 20 69 6e 74 |ut[3];. | {. int|
|00002a90| 20 69 3b 0d 20 20 44 42 | 4c 20 64 65 74 3b 0d 0d | i;. DB|L det;..|
|00002aa0| 20 20 6f 75 74 5b 30 5d | 2e 78 20 3d 20 20 28 69 | out[0]|.x = (i|
|00002ab0| 6e 5b 31 5d 2e 79 20 2a | 20 69 6e 5b 32 5d 2e 7a |n[1].y *| in[2].z|
|00002ac0| 20 2d 20 69 6e 5b 31 5d | 2e 7a 20 2a 20 69 6e 5b | - in[1]|.z * in[|
|00002ad0| 32 5d 2e 79 29 3b 0d 20 | 20 6f 75 74 5b 31 5d 2e |2].y);. | out[1].|
|00002ae0| 78 20 3d 20 2d 28 69 6e | 5b 30 5d 2e 79 20 2a 20 |x = -(in|[0].y * |
|00002af0| 69 6e 5b 32 5d 2e 7a 20 | 2d 20 69 6e 5b 30 5d 2e |in[2].z |- in[0].|
|00002b00| 7a 20 2a 20 69 6e 5b 32 | 5d 2e 79 29 3b 0d 20 20 |z * in[2|].y);. |
|00002b10| 6f 75 74 5b 32 5d 2e 78 | 20 3d 20 20 28 69 6e 5b |out[2].x| = (in[|
|00002b20| 30 5d 2e 79 20 2a 20 69 | 6e 5b 31 5d 2e 7a 20 2d |0].y * i|n[1].z -|
|00002b30| 20 69 6e 5b 30 5d 2e 7a | 20 2a 20 69 6e 5b 31 5d | in[0].z| * in[1]|
|00002b40| 2e 79 29 3b 0d 0d 20 20 | 6f 75 74 5b 30 5d 2e 79 |.y);.. |out[0].y|
|00002b50| 20 3d 20 2d 28 69 6e 5b | 31 5d 2e 78 20 2a 20 69 | = -(in[|1].x * i|
|00002b60| 6e 5b 32 5d 2e 7a 20 2d | 20 69 6e 5b 31 5d 2e 7a |n[2].z -| in[1].z|
|00002b70| 20 2a 20 69 6e 5b 32 5d | 2e 78 29 3b 0d 20 20 6f | * in[2]|.x);. o|
|00002b80| 75 74 5b 31 5d 2e 79 20 | 3d 20 20 28 69 6e 5b 30 |ut[1].y |= (in[0|
|00002b90| 5d 2e 78 20 2a 20 69 6e | 5b 32 5d 2e 7a 20 2d 20 |].x * in|[2].z - |
|00002ba0| 69 6e 5b 30 5d 2e 7a 20 | 2a 20 69 6e 5b 32 5d 2e |in[0].z |* in[2].|
|00002bb0| 78 29 3b 0d 20 20 6f 75 | 74 5b 32 5d 2e 79 20 3d |x);. ou|t[2].y =|
|00002bc0| 20 2d 28 69 6e 5b 30 5d | 2e 78 20 2a 20 69 6e 5b | -(in[0]|.x * in[|
|00002bd0| 31 5d 2e 7a 20 2d 20 69 | 6e 5b 30 5d 2e 7a 20 2a |1].z - i|n[0].z *|
|00002be0| 20 69 6e 5b 31 5d 2e 78 | 29 3b 0d 0d 20 20 6f 75 | in[1].x|);.. ou|
|00002bf0| 74 5b 30 5d 2e 7a 20 3d | 20 20 28 69 6e 5b 31 5d |t[0].z =| (in[1]|
|00002c00| 2e 78 20 2a 20 69 6e 5b | 32 5d 2e 79 20 2d 20 69 |.x * in[|2].y - i|
|00002c10| 6e 5b 31 5d 2e 79 20 2a | 20 69 6e 5b 32 5d 2e 78 |n[1].y *| in[2].x|
|00002c20| 29 3b 0d 20 20 6f 75 74 | 5b 31 5d 2e 7a 20 3d 20 |);. out|[1].z = |
|00002c30| 2d 28 69 6e 5b 30 5d 2e | 78 20 2a 20 69 6e 5b 32 |-(in[0].|x * in[2|
|00002c40| 5d 2e 79 20 2d 20 69 6e | 5b 30 5d 2e 79 20 2a 20 |].y - in|[0].y * |
|00002c50| 69 6e 5b 32 5d 2e 78 29 | 3b 0d 20 20 6f 75 74 5b |in[2].x)|;. out[|
|00002c60| 32 5d 2e 7a 20 3d 20 20 | 28 69 6e 5b 30 5d 2e 78 |2].z = |(in[0].x|
|00002c70| 20 2a 20 69 6e 5b 31 5d | 2e 79 20 2d 20 69 6e 5b | * in[1]|.y - in[|
|00002c80| 30 5d 2e 79 20 2a 20 69 | 6e 5b 31 5d 2e 78 29 3b |0].y * i|n[1].x);|
|00002c90| 0d 0d 20 20 64 65 74 20 | 3d 20 0d 20 20 69 6e 5b |.. det |= . in[|
|00002ca0| 30 5d 2e 78 20 2a 20 69 | 6e 5b 31 5d 2e 79 20 2a |0].x * i|n[1].y *|
|00002cb0| 20 69 6e 5b 32 5d 2e 7a | 20 2b 0d 20 20 69 6e 5b | in[2].z| +. in[|
|00002cc0| 30 5d 2e 79 20 2a 20 69 | 6e 5b 31 5d 2e 7a 20 2a |0].y * i|n[1].z *|
|00002cd0| 20 69 6e 5b 32 5d 2e 78 | 20 2b 0d 20 20 69 6e 5b | in[2].x| +. in[|
|00002ce0| 30 5d 2e 7a 20 2a 20 69 | 6e 5b 31 5d 2e 78 20 2a |0].z * i|n[1].x *|
|00002cf0| 20 69 6e 5b 32 5d 2e 79 | 20 2d 0d 20 20 69 6e 5b | in[2].y| -. in[|
|00002d00| 30 5d 2e 7a 20 2a 20 69 | 6e 5b 31 5d 2e 79 20 2a |0].z * i|n[1].y *|
|00002d10| 20 69 6e 5b 32 5d 2e 78 | 20 2d 0d 20 20 69 6e 5b | in[2].x| -. in[|
|00002d20| 30 5d 2e 78 20 2a 20 69 | 6e 5b 31 5d 2e 7a 20 2a |0].x * i|n[1].z *|
|00002d30| 20 69 6e 5b 32 5d 2e 79 | 20 2d 0d 20 20 69 6e 5b | in[2].y| -. in[|
|00002d40| 30 5d 2e 79 20 2a 20 69 | 6e 5b 31 5d 2e 78 20 2a |0].y * i|n[1].x *|
|00002d50| 20 69 6e 5b 32 5d 2e 7a | 3b 0d 0d 20 20 69 66 20 | in[2].z|;.. if |
|00002d60| 28 64 65 74 20 3e 20 2d | 42 45 5a 49 45 52 5f 45 |(det > -|BEZIER_E|
|00002d70| 50 53 49 4c 4f 4e 20 26 | 26 20 64 65 74 20 3c 20 |PSILON &|& det < |
|00002d80| 42 45 5a 49 45 52 5f 45 | 50 53 49 4c 4f 4e 29 0d |BEZIER_E|PSILON).|
|00002d90| 20 20 20 20 72 65 74 75 | 72 6e 20 30 3b 0d 0d 20 | retu|rn 0;.. |
|00002da0| 20 64 65 74 20 3d 20 31 | 2e 30 20 2f 20 64 65 74 | det = 1|.0 / det|
|00002db0| 3b 0d 0d 20 20 66 6f 72 | 20 28 69 3d 30 3b 69 3c |;.. for| (i=0;i<|
|00002dc0| 33 3b 69 2b 2b 29 0d 20 | 20 20 20 56 53 63 61 6c |3;i++). | VScal|
|00002dd0| 65 45 71 28 6f 75 74 5b | 69 5d 2c 20 64 65 74 29 |eEq(out[|i], det)|
|00002de0| 0d 0d 20 20 20 20 20 20 | 72 65 74 75 72 6e 20 31 |.. |return 1|
|00002df0| 3b 0d 20 20 7d 0d 0d 73 | 74 61 74 69 63 20 69 6e |;. }..s|tatic in|
|00002e00| 74 0d 69 6e 74 65 72 73 | 65 63 74 5f 73 75 62 70 |t.inters|ect_subp|
|00002e10| 61 74 63 68 28 53 68 61 | 70 65 2c 20 72 61 79 2c |atch(Sha|pe, ray,|
|00002e20| 20 56 2c 20 75 75 2c 20 | 76 76 2c 20 44 65 70 74 | V, uu, |vv, Dept|
|00002e30| 68 2c 20 50 2c 20 4e 2c | 20 75 2c 20 76 29 0d 42 |h, P, N,| u, v).B|
|00002e40| 49 43 55 42 49 43 5f 50 | 41 54 43 48 20 2a 53 68 |ICUBIC_P|ATCH *Sh|
|00002e50| 61 70 65 3b 0d 52 41 59 | 20 2a 72 61 79 3b 0d 56 |ape;.RAY| *ray;.V|
|00002e60| 45 43 54 4f 52 20 56 5b | 33 5d 3b 0d 44 42 4c 20 |ECTOR V[|3];.DBL |
|00002e70| 75 75 5b 33 5d 2c 20 76 | 76 5b 33 5d 2c 20 2a 44 |uu[3], v|v[3], *D|
|00002e80| 65 70 74 68 3b 0d 56 45 | 43 54 4f 52 20 2a 50 2c |epth;.VE|CTOR *P,|
|00002e90| 20 2a 4e 3b 0d 44 42 4c | 20 2a 75 2c 20 2a 76 3b | *N;.DBL| *u, *v;|
|00002ea0| 0d 20 20 7b 0d 20 20 56 | 45 43 54 4f 52 20 42 5b |. {. V|ECTOR B[|
|00002eb0| 33 5d 2c 20 49 42 5b 33 | 5d 2c 20 4e 4e 5b 33 5d |3], IB[3|], NN[3]|
|00002ec0| 2c 20 51 2c 20 54 3b 0d | 20 20 44 42 4c 20 64 2c |, Q, T;.| DBL d,|
|00002ed0| 20 6e 2c 20 61 2c 20 62 | 2c 20 72 3b 0d 0d 20 20 | n, a, b|, r;.. |
|00002ee0| 56 53 75 62 28 42 5b 30 | 5d 2c 20 56 5b 31 5d 2c |VSub(B[0|], V[1],|
|00002ef0| 20 56 5b 30 5d 29 3b 0d | 20 20 56 53 75 62 28 42 | V[0]);.| VSub(B|
|00002f00| 5b 31 5d 2c 20 56 5b 32 | 5d 2c 20 56 5b 30 5d 29 |[1], V[2|], V[0])|
|00002f10| 3b 0d 20 20 56 43 72 6f | 73 73 28 42 5b 32 5d 2c |;. VCro|ss(B[2],|
|00002f20| 20 42 5b 30 5d 2c 20 42 | 5b 31 5d 29 3b 0d 20 20 | B[0], B|[1]);. |
|00002f30| 56 44 6f 74 28 64 2c 20 | 42 5b 32 5d 2c 20 42 5b |VDot(d, |B[2], B[|
|00002f40| 32 5d 29 3b 0d 20 20 69 | 66 20 28 64 20 3c 20 42 |2]);. i|f (d < B|
|00002f50| 45 5a 49 45 52 5f 45 50 | 53 49 4c 4f 4e 29 0d 20 |EZIER_EP|SILON). |
|00002f60| 20 20 20 72 65 74 75 72 | 6e 20 30 3b 0d 20 20 64 | retur|n 0;. d|
|00002f70| 20 3d 20 31 2e 30 20 2f | 20 73 71 72 74 28 64 29 | = 1.0 /| sqrt(d)|
|00002f80| 3b 0d 20 20 56 53 63 61 | 6c 65 45 71 28 42 5b 32 |;. VSca|leEq(B[2|
|00002f90| 5d 2c 20 64 29 3b 0d 0d | 20 20 69 66 20 28 21 49 |], d);..| if (!I|
|00002fa0| 6e 76 65 72 74 4d 61 74 | 72 69 78 28 42 2c 20 49 |nvertMat|rix(B, I|
|00002fb0| 42 29 29 0d 20 20 20 20 | 2f 2a 20 44 65 67 65 6e |B)). |/* Degen|
|00002fc0| 65 72 61 74 65 20 74 72 | 69 61 6e 67 6c 65 20 2a |erate tr|iangle *|
|00002fd0| 2f 0d 20 20 20 20 72 65 | 74 75 72 6e 20 30 3b 0d |/. re|turn 0;.|
|00002fe0| 0d 20 20 56 44 6f 74 28 | 64 2c 20 72 61 79 2d 3e |. VDot(|d, ray->|
|00002ff0| 44 69 72 65 63 74 69 6f | 6e 2c 20 49 42 5b 32 5d |Directio|n, IB[2]|
|00003000| 29 3b 0d 20 20 69 66 20 | 28 64 20 3e 20 2d 42 45 |);. if |(d > -BE|
|00003010| 5a 49 45 52 5f 45 50 53 | 49 4c 4f 4e 20 26 26 20 |ZIER_EPS|ILON && |
|00003020| 64 20 3c 20 42 45 5a 49 | 45 52 5f 45 50 53 49 4c |d < BEZI|ER_EPSIL|
|00003030| 4f 4e 29 0d 20 20 20 20 | 72 65 74 75 72 6e 20 30 |ON). |return 0|
|00003040| 3b 0d 0d 20 20 56 53 75 | 62 28 51 2c 20 56 5b 30 |;.. VSu|b(Q, V[0|
|00003050| 5d 2c 20 72 61 79 2d 3e | 49 6e 69 74 69 61 6c 29 |], ray->|Initial)|
|00003060| 3b 0d 20 20 56 44 6f 74 | 28 6e 2c 20 51 2c 20 49 |;. VDot|(n, Q, I|
|00003070| 42 5b 32 5d 29 3b 0d 20 | 20 2a 44 65 70 74 68 20 |B[2]);. | *Depth |
|00003080| 3d 20 6e 20 2f 20 64 3b | 0d 20 20 69 66 20 28 2a |= n / d;|. if (*|
|00003090| 44 65 70 74 68 20 3c 20 | 42 45 5a 49 45 52 5f 54 |Depth < |BEZIER_T|
|000030a0| 4f 4c 45 52 41 4e 43 45 | 29 0d 20 20 20 20 72 65 |OLERANCE|). re|
|000030b0| 74 75 72 6e 20 30 3b 0d | 20 20 56 53 63 61 6c 65 |turn 0;.| VScale|
|000030c0| 28 54 2c 20 72 61 79 2d | 3e 44 69 72 65 63 74 69 |(T, ray-|>Directi|
|000030d0| 6f 6e 2c 20 2a 44 65 70 | 74 68 29 3b 0d 20 20 56 |on, *Dep|th);. V|
|000030e0| 41 64 64 28 2a 50 2c 20 | 72 61 79 2d 3e 49 6e 69 |Add(*P, |ray->Ini|
|000030f0| 74 69 61 6c 2c 20 54 29 | 3b 0d 20 20 56 53 75 62 |tial, T)|;. VSub|
|00003100| 28 51 2c 20 2a 50 2c 20 | 56 5b 30 5d 29 3b 0d 0d |(Q, *P, |V[0]);..|
|00003110| 20 20 56 44 6f 74 28 61 | 2c 20 51 2c 20 49 42 5b | VDot(a|, Q, IB[|
|00003120| 30 5d 29 3b 0d 20 20 56 | 44 6f 74 28 62 2c 20 51 |0]);. V|Dot(b, Q|
|00003130| 2c 20 49 42 5b 31 5d 29 | 3b 0d 20 20 69 66 20 28 |, IB[1])|;. if (|
|00003140| 61 20 3c 20 30 2e 30 20 | 7c 7c 20 62 20 3c 20 30 |a < 0.0 ||| b < 0|
|00003150| 2e 30 20 7c 7c 20 61 20 | 2b 20 62 20 3e 20 31 2e |.0 || a |+ b > 1.|
|00003160| 30 29 20 0d 20 20 20 20 | 72 65 74 75 72 6e 20 30 |0) . |return 0|
|00003170| 3b 0d 0d 20 20 72 20 3d | 20 31 2e 30 20 2d 20 61 |;.. r =| 1.0 - a|
|00003180| 20 2d 20 62 3b 0d 0d 20 | 20 4d 61 6b 65 5f 56 65 | - b;.. | Make_Ve|
|00003190| 63 74 6f 72 28 4e 2c 20 | 30 2e 30 2c 20 30 2e 30 |ctor(N, |0.0, 0.0|
|000031a0| 2c 20 30 2e 30 29 3b 0d | 20 20 62 65 7a 69 65 72 |, 0.0);.| bezier|
|000031b0| 5f 76 61 6c 75 65 28 28 | 56 45 43 54 4f 52 20 28 |_value((|VECTOR (|
|000031c0| 2a 29 5b 34 5d 5b 34 5d | 29 26 53 68 61 70 65 2d |*)[4][4]|)&Shape-|
|000031d0| 3e 43 6f 6e 74 72 6f 6c | 5f 50 6f 69 6e 74 73 2c |>Control|_Points,|
|000031e0| 0d 20 20 20 20 75 75 5b | 30 5d 2c 20 76 76 5b 30 |. uu[|0], vv[0|
|000031f0| 5d 2c 20 26 54 2c 20 26 | 4e 4e 5b 30 5d 29 3b 0d |], &T, &|NN[0]);.|
|00003200| 20 20 62 65 7a 69 65 72 | 5f 76 61 6c 75 65 28 28 | bezier|_value((|
|00003210| 56 45 43 54 4f 52 20 28 | 2a 29 5b 34 5d 5b 34 5d |VECTOR (|*)[4][4]|
|00003220| 29 26 53 68 61 70 65 2d | 3e 43 6f 6e 74 72 6f 6c |)&Shape-|>Control|
|00003230| 5f 50 6f 69 6e 74 73 2c | 0d 20 20 20 20 75 75 5b |_Points,|. uu[|
|00003240| 31 5d 2c 20 76 76 5b 31 | 5d 2c 20 26 54 2c 20 26 |1], vv[1|], &T, &|
|00003250| 4e 4e 5b 31 5d 29 3b 0d | 20 20 62 65 7a 69 65 72 |NN[1]);.| bezier|
|00003260| 5f 76 61 6c 75 65 28 28 | 56 45 43 54 4f 52 20 28 |_value((|VECTOR (|
|00003270| 2a 29 5b 34 5d 5b 34 5d | 29 26 53 68 61 70 65 2d |*)[4][4]|)&Shape-|
|00003280| 3e 43 6f 6e 74 72 6f 6c | 5f 50 6f 69 6e 74 73 2c |>Control|_Points,|
|00003290| 0d 20 20 20 20 75 75 5b | 32 5d 2c 20 76 76 5b 32 |. uu[|2], vv[2|
|000032a0| 5d 2c 20 26 54 2c 20 26 | 4e 4e 5b 32 5d 29 3b 0d |], &T, &|NN[2]);.|
|000032b0| 20 20 56 53 63 61 6c 65 | 28 54 2c 20 4e 4e 5b 30 | VScale|(T, NN[0|
|000032c0| 5d 2c 20 72 29 3b 20 56 | 41 64 64 28 2a 4e 2c 20 |], r); V|Add(*N, |
|000032d0| 2a 4e 2c 20 54 29 3b 0d | 20 20 56 53 63 61 6c 65 |*N, T);.| VScale|
|000032e0| 28 54 2c 20 4e 4e 5b 31 | 5d 2c 20 61 29 3b 20 56 |(T, NN[1|], a); V|
|000032f0| 41 64 64 28 2a 4e 2c 20 | 2a 4e 2c 20 54 29 3b 0d |Add(*N, |*N, T);.|
|00003300| 20 20 56 53 63 61 6c 65 | 28 54 2c 20 4e 4e 5b 32 | VScale|(T, NN[2|
|00003310| 5d 2c 20 62 29 3b 20 56 | 41 64 64 28 2a 4e 2c 20 |], b); V|Add(*N, |
|00003320| 2a 4e 2c 20 54 29 3b 0d | 20 20 2a 75 20 3d 20 72 |*N, T);.| *u = r|
|00003330| 20 2a 20 75 75 5b 30 5d | 20 2b 20 61 20 2a 20 75 | * uu[0]| + a * u|
|00003340| 75 5b 31 5d 20 2b 20 62 | 20 2a 20 75 75 5b 32 5d |u[1] + b| * uu[2]|
|00003350| 3b 0d 20 20 2a 76 20 3d | 20 72 20 2a 20 76 76 5b |;. *v =| r * vv[|
|00003360| 30 5d 20 2b 20 61 20 2a | 20 76 76 5b 31 5d 20 2b |0] + a *| vv[1] +|
|00003370| 20 62 20 2a 20 76 76 5b | 32 5d 3b 0d 20 20 56 44 | b * vv[|2];. VD|
|00003380| 6f 74 28 64 2c 20 2a 4e | 2c 20 2a 4e 29 3b 0d 20 |ot(d, *N|, *N);. |
|00003390| 20 69 66 20 28 64 20 3e | 20 42 45 5a 49 45 52 5f | if (d >| BEZIER_|
|000033a0| 45 50 53 49 4c 4f 4e 29 | 20 0d 20 20 20 20 7b 0d |EPSILON)| . {.|
|000033b0| 20 20 20 20 64 20 3d 20 | 31 2e 30 20 2f 20 73 71 | d = |1.0 / sq|
|000033c0| 72 74 28 64 29 3b 0d 20 | 20 20 20 56 53 63 61 6c |rt(d);. | VScal|
|000033d0| 65 45 71 28 2a 4e 2c 20 | 64 29 3b 0d 20 20 20 20 |eEq(*N, |d);. |
|000033e0| 7d 0d 20 20 65 6c 73 65 | 0d 20 20 20 20 4d 61 6b |}. else|. Mak|
|000033f0| 65 5f 56 65 63 74 6f 72 | 28 4e 2c 20 31 2c 20 30 |e_Vector|(N, 1, 0|
|00003400| 2c 20 30 29 3b 0d 20 20 | 72 65 74 75 72 6e 20 31 |, 0);. |return 1|
|00003410| 3b 0d 20 20 7d 0d 0d 2f | 2a 20 46 69 6e 64 20 61 |;. }../|* Find a|
|00003420| 20 73 70 68 65 72 65 20 | 74 68 61 74 20 63 6f 6e | sphere |that con|
|00003430| 74 61 69 6e 73 20 61 6c | 6c 20 6f 66 20 74 68 65 |tains al|l of the|
|00003440| 20 70 6f 69 6e 74 73 20 | 69 6e 20 74 68 65 20 6c | points |in the l|
|00003450| 69 73 74 20 22 76 65 63 | 74 6f 72 73 22 20 2a 2f |ist "vec|tors" */|
|00003460| 0d 73 74 61 74 69 63 20 | 76 6f 69 64 20 66 69 6e |.static |void fin|
|00003470| 64 5f 61 76 65 72 61 67 | 65 28 76 65 63 74 6f 72 |d_averag|e(vector|
|00003480| 5f 63 6f 75 6e 74 2c 20 | 76 65 63 74 6f 72 73 2c |_count, |vectors,|
|00003490| 20 63 65 6e 74 65 72 2c | 20 72 61 64 69 75 73 29 | center,| radius)|
|000034a0| 0d 69 6e 74 20 76 65 63 | 74 6f 72 5f 63 6f 75 6e |.int vec|tor_coun|
|000034b0| 74 3b 0d 56 45 43 54 4f | 52 20 2a 76 65 63 74 6f |t;.VECTO|R *vecto|
|000034c0| 72 73 2c 20 2a 63 65 6e | 74 65 72 3b 0d 44 42 4c |rs, *cen|ter;.DBL|
|000034d0| 20 2a 72 61 64 69 75 73 | 3b 0d 20 20 7b 0d 20 20 | *radius|;. {. |
|000034e0| 44 42 4c 20 72 30 2c 20 | 72 31 2c 20 78 63 3d 30 |DBL r0, |r1, xc=0|
|000034f0| 2c 20 79 63 3d 30 2c 20 | 7a 63 3d 30 3b 0d 20 20 |, yc=0, |zc=0;. |
|00003500| 44 42 4c 20 78 30 2c 20 | 79 30 2c 20 7a 30 3b 0d |DBL x0, |y0, z0;.|
|00003510| 20 20 69 6e 74 20 69 3b | 0d 20 20 66 6f 72 20 28 | int i;|. for (|
|00003520| 69 3d 30 3b 69 3c 76 65 | 63 74 6f 72 5f 63 6f 75 |i=0;i<ve|ctor_cou|
|00003530| 6e 74 3b 69 2b 2b 29 20 | 0d 20 20 20 20 7b 0d 20 |nt;i++) |. {. |
|00003540| 20 20 20 78 63 20 2b 3d | 20 76 65 63 74 6f 72 73 | xc +=| vectors|
|00003550| 5b 69 5d 2e 78 3b 0d 20 | 20 20 20 79 63 20 2b 3d |[i].x;. | yc +=|
|00003560| 20 76 65 63 74 6f 72 73 | 5b 69 5d 2e 79 3b 0d 20 | vectors|[i].y;. |
|00003570| 20 20 20 7a 63 20 2b 3d | 20 76 65 63 74 6f 72 73 | zc +=| vectors|
|00003580| 5b 69 5d 2e 7a 3b 0d 20 | 20 20 20 7d 0d 20 20 78 |[i].z;. | }. x|
|00003590| 63 20 2f 3d 20 28 44 42 | 4c 29 76 65 63 74 6f 72 |c /= (DB|L)vector|
|000035a0| 5f 63 6f 75 6e 74 3b 0d | 20 20 79 63 20 2f 3d 20 |_count;.| yc /= |
|000035b0| 28 44 42 4c 29 76 65 63 | 74 6f 72 5f 63 6f 75 6e |(DBL)vec|tor_coun|
|000035c0| 74 3b 0d 20 20 7a 63 20 | 2f 3d 20 28 44 42 4c 29 |t;. zc |/= (DBL)|
|000035d0| 76 65 63 74 6f 72 5f 63 | 6f 75 6e 74 3b 0d 20 20 |vector_c|ount;. |
|000035e0| 72 30 20 3d 20 30 2e 30 | 3b 0d 20 20 66 6f 72 20 |r0 = 0.0|;. for |
|000035f0| 28 69 3d 30 3b 69 3c 76 | 65 63 74 6f 72 5f 63 6f |(i=0;i<v|ector_co|
|00003600| 75 6e 74 3b 69 2b 2b 29 | 20 0d 20 20 20 20 7b 0d |unt;i++)| . {.|
|00003610| 20 20 20 20 78 30 20 3d | 20 76 65 63 74 6f 72 73 | x0 =| vectors|
|00003620| 5b 69 5d 2e 78 20 2d 20 | 78 63 3b 0d 20 20 20 20 |[i].x - |xc;. |
|00003630| 79 30 20 3d 20 76 65 63 | 74 6f 72 73 5b 69 5d 2e |y0 = vec|tors[i].|
|00003640| 79 20 2d 20 79 63 3b 0d | 20 20 20 20 7a 30 20 3d |y - yc;.| z0 =|
|00003650| 20 76 65 63 74 6f 72 73 | 5b 69 5d 2e 7a 20 2d 20 | vectors|[i].z - |
|00003660| 7a 63 3b 0d 20 20 20 20 | 72 31 20 3d 20 78 30 20 |zc;. |r1 = x0 |
|00003670| 2a 20 78 30 20 2b 20 79 | 30 20 2a 20 79 30 20 2b |* x0 + y|0 * y0 +|
|00003680| 20 7a 30 20 2a 20 7a 30 | 3b 0d 20 20 20 20 69 66 | z0 * z0|;. if|
|00003690| 20 28 72 31 20 3e 20 72 | 30 29 20 72 30 20 3d 20 | (r1 > r|0) r0 = |
|000036a0| 72 31 3b 0d 20 20 20 20 | 7d 0d 20 20 63 65 6e 74 |r1;. |}. cent|
|000036b0| 65 72 2d 3e 78 20 3d 20 | 78 63 3b 20 63 65 6e 74 |er->x = |xc; cent|
|000036c0| 65 72 2d 3e 79 20 3d 20 | 79 63 3b 20 63 65 6e 74 |er->y = |yc; cent|
|000036d0| 65 72 2d 3e 7a 20 3d 20 | 7a 63 3b 0d 20 20 2a 72 |er->z = |zc;. *r|
|000036e0| 61 64 69 75 73 20 3d 20 | 72 30 3b 0d 20 20 7d 0d |adius = |r0;. }.|
|000036f0| 0d 73 74 61 74 69 63 20 | 69 6e 74 20 73 70 68 65 |.static |int sphe|
|00003700| 72 69 63 61 6c 5f 62 6f | 75 6e 64 73 5f 63 68 65 |rical_bo|unds_che|
|00003710| 63 6b 28 52 61 79 2c 20 | 63 65 6e 74 65 72 2c 20 |ck(Ray, |center, |
|00003720| 72 61 64 69 75 73 29 0d | 52 41 59 20 2a 52 61 79 |radius).|RAY *Ray|
|00003730| 3b 0d 56 45 43 54 4f 52 | 20 2a 63 65 6e 74 65 72 |;.VECTOR| *center|
|00003740| 3b 0d 44 42 4c 20 72 61 | 64 69 75 73 3b 0d 20 20 |;.DBL ra|dius;. |
|00003750| 7b 0d 20 20 44 42 4c 20 | 78 2c 20 79 2c 20 7a 2c |{. DBL |x, y, z,|
|00003760| 20 64 69 73 74 31 2c 20 | 64 69 73 74 32 3b 0d 20 | dist1, |dist2;. |
|00003770| 20 78 20 3d 20 63 65 6e | 74 65 72 2d 3e 78 20 2d | x = cen|ter->x -|
|00003780| 20 52 61 79 2d 3e 49 6e | 69 74 69 61 6c 2e 78 3b | Ray->In|itial.x;|
|00003790| 0d 20 20 79 20 3d 20 63 | 65 6e 74 65 72 2d 3e 79 |. y = c|enter->y|
|000037a0| 20 2d 20 52 61 79 2d 3e | 49 6e 69 74 69 61 6c 2e | - Ray->|Initial.|
|000037b0| 79 3b 0d 20 20 7a 20 3d | 20 63 65 6e 74 65 72 2d |y;. z =| center-|
|000037c0| 3e 7a 20 2d 20 52 61 79 | 2d 3e 49 6e 69 74 69 61 |>z - Ray|->Initia|
|000037d0| 6c 2e 7a 3b 0d 20 20 64 | 69 73 74 31 20 3d 20 78 |l.z;. d|ist1 = x|
|000037e0| 20 2a 20 78 20 2b 20 79 | 20 2a 20 79 20 2b 20 7a | * x + y| * y + z|
|000037f0| 20 2a 20 7a 3b 0d 20 20 | 69 66 20 28 64 69 73 74 | * z;. |if (dist|
|00003800| 31 20 3c 20 72 61 64 69 | 75 73 29 0d 20 20 20 20 |1 < radi|us). |
|00003810| 2f 2a 20 72 61 79 20 73 | 74 61 72 74 73 20 69 6e |/* ray s|tarts in|
|00003820| 73 69 64 65 20 73 70 68 | 65 72 65 20 2d 20 61 73 |side sph|ere - as|
|00003830| 73 75 6d 65 20 69 74 20 | 69 6e 74 65 72 73 65 63 |sume it |intersec|
|00003840| 74 73 2e 20 2a 2f 0d 20 | 20 20 20 72 65 74 75 72 |ts. */. | retur|
|00003850| 6e 20 31 3b 0d 20 20 65 | 6c 73 65 20 0d 20 20 20 |n 1;. e|lse . |
|00003860| 20 7b 0d 20 20 20 20 64 | 69 73 74 32 20 3d 20 78 | {. d|ist2 = x|
|00003870| 2a 52 61 79 2d 3e 44 69 | 72 65 63 74 69 6f 6e 2e |*Ray->Di|rection.|
|00003880| 78 20 2b 20 79 2a 52 61 | 79 2d 3e 44 69 72 65 63 |x + y*Ra|y->Direc|
|00003890| 74 69 6f 6e 2e 79 20 2b | 20 7a 2a 52 61 79 2d 3e |tion.y +| z*Ray->|
|000038a0| 44 69 72 65 63 74 69 6f | 6e 2e 7a 3b 0d 20 20 20 |Directio|n.z;. |
|000038b0| 20 64 69 73 74 32 20 3d | 20 64 69 73 74 32 20 2a | dist2 =| dist2 *|
|000038c0| 20 64 69 73 74 32 3b 0d | 20 20 20 20 69 66 20 28 | dist2;.| if (|
|000038d0| 64 69 73 74 32 20 3e 20 | 30 20 26 26 20 28 64 69 |dist2 > |0 && (di|
|000038e0| 73 74 31 20 2d 20 64 69 | 73 74 32 20 3c 20 72 61 |st1 - di|st2 < ra|
|000038f0| 64 69 75 73 29 29 0d 20 | 20 20 20 20 20 72 65 74 |dius)). | ret|
|00003900| 75 72 6e 20 31 3b 0d 20 | 20 20 20 7d 0d 20 20 72 |urn 1;. | }. r|
|00003910| 65 74 75 72 6e 20 30 3b | 0d 20 20 7d 0d 0d 2f 2a |eturn 0;|. }../*|
|00003920| 20 46 69 6e 64 20 61 20 | 73 70 68 65 72 65 20 74 | Find a |sphere t|
|00003930| 68 61 74 20 62 6f 75 6e | 64 73 20 61 6c 6c 20 6f |hat boun|ds all o|
|00003940| 66 20 74 68 65 20 63 6f | 6e 74 72 6f 6c 20 70 6f |f the co|ntrol po|
|00003950| 69 6e 74 73 20 6f 66 20 | 61 20 42 65 7a 69 65 72 |ints of |a Bezier|
|00003960| 20 70 61 74 63 68 2e 0d | 20 20 20 54 68 65 20 76 | patch..| The v|
|00003970| 61 6c 75 65 73 20 72 65 | 74 75 72 6e 65 64 20 61 |alues re|turned a|
|00003980| 72 65 3a 20 74 68 65 20 | 63 65 6e 74 65 72 20 6f |re: the |center o|
|00003990| 66 20 74 68 65 20 62 6f | 75 6e 64 69 6e 67 20 73 |f the bo|unding s|
|000039a0| 70 68 65 72 65 2c 20 61 | 6e 64 20 74 68 65 0d 20 |phere, a|nd the. |
|000039b0| 20 20 73 71 75 61 72 65 | 20 6f 66 20 74 68 65 20 | square| of the |
|000039c0| 72 61 64 69 75 73 20 6f | 66 20 74 68 65 20 62 6f |radius o|f the bo|
|000039d0| 75 6e 64 69 6e 67 20 73 | 70 68 65 72 65 2e 20 2a |unding s|phere. *|
|000039e0| 2f 0d 73 74 61 74 69 63 | 20 76 6f 69 64 20 62 65 |/.static| void be|
|000039f0| 7a 69 65 72 5f 62 6f 75 | 6e 64 69 6e 67 5f 73 70 |zier_bou|nding_sp|
|00003a00| 68 65 72 65 28 50 61 74 | 63 68 2c 20 63 65 6e 74 |here(Pat|ch, cent|
|00003a10| 65 72 2c 20 72 61 64 69 | 75 73 29 0d 56 45 43 54 |er, radi|us).VECT|
|00003a20| 4f 52 20 28 2a 50 61 74 | 63 68 29 5b 34 5d 5b 34 |OR (*Pat|ch)[4][4|
|00003a30| 5d 2c 20 2a 63 65 6e 74 | 65 72 3b 0d 44 42 4c 20 |], *cent|er;.DBL |
|00003a40| 2a 72 61 64 69 75 73 3b | 0d 20 20 7b 0d 20 20 44 |*radius;|. {. D|
|00003a50| 42 4c 20 72 30 2c 20 72 | 31 2c 20 78 63 3d 30 2c |BL r0, r|1, xc=0,|
|00003a60| 20 79 63 3d 30 2c 20 7a | 63 3d 30 3b 0d 20 20 44 | yc=0, z|c=0;. D|
|00003a70| 42 4c 20 78 30 2c 20 79 | 30 2c 20 7a 30 3b 0d 20 |BL x0, y|0, z0;. |
|00003a80| 20 69 6e 74 20 69 2c 20 | 6a 3b 0d 20 20 66 6f 72 | int i, |j;. for|
|00003a90| 20 28 69 3d 30 3b 69 3c | 34 3b 69 2b 2b 29 20 0d | (i=0;i<|4;i++) .|
|00003aa0| 20 20 20 20 7b 0d 20 20 | 20 20 66 6f 72 20 28 6a | {. | for (j|
|00003ab0| 3d 30 3b 6a 3c 34 3b 6a | 2b 2b 29 20 0d 20 20 20 |=0;j<4;j|++) . |
|00003ac0| 20 20 20 7b 0d 20 20 20 | 20 20 20 78 63 20 2b 3d | {. | xc +=|
|00003ad0| 20 28 2a 50 61 74 63 68 | 29 5b 69 5d 5b 6a 5d 2e | (*Patch|)[i][j].|
|00003ae0| 78 3b 0d 20 20 20 20 20 | 20 79 63 20 2b 3d 20 28 |x;. | yc += (|
|00003af0| 2a 50 61 74 63 68 29 5b | 69 5d 5b 6a 5d 2e 79 3b |*Patch)[|i][j].y;|
|00003b00| 0d 20 20 20 20 20 20 7a | 63 20 2b 3d 20 28 2a 50 |. z|c += (*P|
|00003b10| 61 74 63 68 29 5b 69 5d | 5b 6a 5d 2e 7a 3b 0d 20 |atch)[i]|[j].z;. |
|00003b20| 20 20 20 20 20 7d 0d 20 | 20 20 20 7d 0d 20 20 78 | }. | }. x|
|00003b30| 63 20 2f 3d 20 31 36 2e | 30 3b 0d 20 20 79 63 20 |c /= 16.|0;. yc |
|00003b40| 2f 3d 20 31 36 2e 30 3b | 0d 20 20 7a 63 20 2f 3d |/= 16.0;|. zc /=|
|00003b50| 20 31 36 2e 30 3b 0d 20 | 20 72 30 20 3d 20 30 2e | 16.0;. | r0 = 0.|
|00003b60| 30 3b 0d 20 20 66 6f 72 | 20 28 69 3d 30 3b 69 3c |0;. for| (i=0;i<|
|00003b70| 34 3b 69 2b 2b 29 20 0d | 20 20 20 20 7b 0d 20 20 |4;i++) .| {. |
|00003b80| 20 20 66 6f 72 20 28 6a | 3d 30 3b 6a 3c 34 3b 6a | for (j|=0;j<4;j|
|00003b90| 2b 2b 29 20 0d 20 20 20 | 20 20 20 7b 0d 20 20 20 |++) . | {. |
|00003ba0| 20 20 20 78 30 20 3d 20 | 28 2a 50 61 74 63 68 29 | x0 = |(*Patch)|
|00003bb0| 5b 69 5d 5b 6a 5d 2e 78 | 20 2d 20 78 63 3b 0d 20 |[i][j].x| - xc;. |
|00003bc0| 20 20 20 20 20 79 30 20 | 3d 20 28 2a 50 61 74 63 | y0 |= (*Patc|
|00003bd0| 68 29 5b 69 5d 5b 6a 5d | 2e 79 20 2d 20 79 63 3b |h)[i][j]|.y - yc;|
|00003be0| 0d 20 20 20 20 20 20 7a | 30 20 3d 20 28 2a 50 61 |. z|0 = (*Pa|
|00003bf0| 74 63 68 29 5b 69 5d 5b | 6a 5d 2e 7a 20 2d 20 7a |tch)[i][|j].z - z|
|00003c00| 63 3b 0d 20 20 20 20 20 | 20 72 31 20 3d 20 78 30 |c;. | r1 = x0|
|00003c10| 20 2a 20 78 30 20 2b 20 | 79 30 20 2a 20 79 30 20 | * x0 + |y0 * y0 |
|00003c20| 2b 20 7a 30 20 2a 20 7a | 30 3b 0d 20 20 20 20 20 |+ z0 * z|0;. |
|00003c30| 20 69 66 20 28 72 31 20 | 3e 20 72 30 29 20 72 30 | if (r1 |> r0) r0|
|00003c40| 20 3d 20 72 31 3b 0d 20 | 20 20 20 20 20 7d 0d 20 | = r1;. | }. |
|00003c50| 20 20 20 7d 0d 20 20 63 | 65 6e 74 65 72 2d 3e 78 | }. c|enter->x|
|00003c60| 20 3d 20 78 63 3b 20 63 | 65 6e 74 65 72 2d 3e 79 | = xc; c|enter->y|
|00003c70| 20 3d 20 79 63 3b 20 63 | 65 6e 74 65 72 2d 3e 7a | = yc; c|enter->z|
|00003c80| 20 3d 20 7a 63 3b 0d 20 | 20 2a 72 61 64 69 75 73 | = zc;. | *radius|
|00003c90| 20 3d 20 72 30 3b 0d 20 | 20 7d 0d 0d 2f 2a 20 50 | = r0;. | }../* P|
|00003ca0| 72 65 63 6f 6d 70 75 74 | 65 20 67 72 69 64 20 70 |recomput|e grid p|
|00003cb0| 6f 69 6e 74 73 20 61 6e | 64 20 6e 6f 72 6d 61 6c |oints an|d normal|
|00003cc0| 73 20 66 6f 72 20 61 20 | 62 65 7a 69 65 72 20 70 |s for a |bezier p|
|00003cd0| 61 74 63 68 20 2a 2f 0d | 76 6f 69 64 20 50 72 65 |atch */.|void Pre|
|00003ce0| 63 6f 6d 70 75 74 65 5f | 50 61 74 63 68 5f 56 61 |compute_|Patch_Va|
|00003cf0| 6c 75 65 73 28 53 68 61 | 70 65 29 0d 42 49 43 55 |lues(Sha|pe).BICU|
|00003d00| 42 49 43 5f 50 41 54 43 | 48 20 2a 53 68 61 70 65 |BIC_PATC|H *Shape|
|00003d10| 3b 0d 20 20 7b 0d 20 20 | 69 6e 74 20 69 2c 20 6a |;. {. |int i, j|
|00003d20| 3b 0d 20 20 56 45 43 54 | 4f 52 20 43 6f 6e 74 72 |;. VECT|OR Contr|
|00003d30| 6f 6c 5f 50 6f 69 6e 74 | 73 5b 31 36 5d 3b 0d 20 |ol_Point|s[16];. |
|00003d40| 20 56 45 43 54 4f 52 20 | 28 2a 50 61 74 63 68 5f | VECTOR |(*Patch_|
|00003d50| 50 74 72 29 5b 34 5d 5b | 34 5d 20 3d 20 28 56 45 |Ptr)[4][|4] = (VE|
|00003d60| 43 54 4f 52 20 28 2a 29 | 5b 34 5d 5b 34 5d 29 20 |CTOR (*)|[4][4]) |
|00003d70| 53 68 61 70 65 2d 3e 43 | 6f 6e 74 72 6f 6c 5f 50 |Shape->C|ontrol_P|
|00003d80| 6f 69 6e 74 73 3b 0d 0d | 20 20 2f 2a 20 43 61 6c |oints;..| /* Cal|
|00003d90| 63 75 6c 61 74 65 20 74 | 68 65 20 62 6f 75 6e 64 |culate t|he bound|
|00003da0| 69 6e 67 20 73 70 68 65 | 72 65 20 66 6f 72 20 74 |ing sphe|re for t|
|00003db0| 68 65 20 65 6e 74 69 72 | 65 20 70 61 74 63 68 2e |he entir|e patch.|
|00003dc0| 20 2a 2f 0d 20 20 66 6f | 72 20 28 69 3d 30 3b 69 | */. fo|r (i=0;i|
|00003dd0| 3c 34 3b 69 2b 2b 29 20 | 66 6f 72 20 28 6a 3d 30 |<4;i++) |for (j=0|
|00003de0| 3b 6a 3c 34 3b 6a 2b 2b | 29 0d 20 20 20 20 43 6f |;j<4;j++|). Co|
|00003df0| 6e 74 72 6f 6c 5f 50 6f | 69 6e 74 73 5b 34 2a 69 |ntrol_Po|ints[4*i|
|00003e00| 2b 6a 5d 20 3d 20 53 68 | 61 70 65 2d 3e 43 6f 6e |+j] = Sh|ape->Con|
|00003e10| 74 72 6f 6c 5f 50 6f 69 | 6e 74 73 5b 69 5d 5b 6a |trol_Poi|nts[i][j|
|00003e20| 5d 3b 0d 20 20 66 69 6e | 64 5f 61 76 65 72 61 67 |];. fin|d_averag|
|00003e30| 65 28 31 36 2c 20 26 43 | 6f 6e 74 72 6f 6c 5f 50 |e(16, &C|ontrol_P|
|00003e40| 6f 69 6e 74 73 5b 30 5d | 2c 20 26 53 68 61 70 65 |oints[0]|, &Shape|
|00003e50| 2d 3e 42 6f 75 6e 64 69 | 6e 67 5f 53 70 68 65 72 |->Boundi|ng_Spher|
|00003e60| 65 5f 43 65 6e 74 65 72 | 2c 0d 20 20 20 20 26 53 |e_Center|,. &S|
|00003e70| 68 61 70 65 2d 3e 42 6f | 75 6e 64 69 6e 67 5f 53 |hape->Bo|unding_S|
|00003e80| 70 68 65 72 65 5f 52 61 | 64 69 75 73 29 3b 0d 0d |phere_Ra|dius);..|
|00003e90| 20 20 69 66 20 28 53 68 | 61 70 65 2d 3e 50 61 74 | if (Sh|ape->Pat|
|00003ea0| 63 68 5f 54 79 70 65 20 | 3d 3d 20 30 29 0d 20 20 |ch_Type |== 0). |
|00003eb0| 20 20 72 65 74 75 72 6e | 3b 0d 20 20 65 6c 73 65 | return|;. else|
|00003ec0| 20 0d 20 20 20 20 7b 0d | 20 20 20 20 69 66 20 28 | . {.| if (|
|00003ed0| 53 68 61 70 65 2d 3e 4e | 6f 64 65 5f 54 72 65 65 |Shape->N|ode_Tree|
|00003ee0| 20 21 3d 20 4e 55 4c 4c | 29 0d 20 20 20 20 20 20 | != NULL|). |
|00003ef0| 62 65 7a 69 65 72 5f 74 | 72 65 65 5f 64 65 6c 65 |bezier_t|ree_dele|
|00003f00| 74 65 72 28 53 68 61 70 | 65 2d 3e 4e 6f 64 65 5f |ter(Shap|e->Node_|
|00003f10| 54 72 65 65 29 3b 0d 20 | 20 20 20 53 68 61 70 65 |Tree);. | Shape|
|00003f20| 2d 3e 4e 6f 64 65 5f 54 | 72 65 65 20 3d 20 62 65 |->Node_T|ree = be|
|00003f30| 7a 69 65 72 5f 74 72 65 | 65 5f 62 75 69 6c 64 65 |zier_tre|e_builde|
|00003f40| 72 28 53 68 61 70 65 2c | 20 50 61 74 63 68 5f 50 |r(Shape,| Patch_P|
|00003f50| 74 72 2c 0d 20 20 20 20 | 20 20 30 2e 30 2c 20 31 |tr,. | 0.0, 1|
|00003f60| 2e 30 2c 20 30 2e 30 2c | 20 31 2e 30 2c 20 30 29 |.0, 0.0,| 1.0, 0)|
|00003f70| 3b 0d 20 20 20 20 72 65 | 74 75 72 6e 3b 0d 20 20 |;. re|turn;. |
|00003f80| 20 20 7d 0d 20 20 7d 0d | 0d 2f 2a 20 44 65 74 65 | }. }.|./* Dete|
|00003f90| 72 6d 69 6e 65 20 74 68 | 65 20 64 69 73 74 61 6e |rmine th|e distan|
|00003fa0| 63 65 20 66 72 6f 6d 20 | 61 20 70 6f 69 6e 74 20 |ce from |a point |
|00003fb0| 74 6f 20 61 20 70 6c 61 | 6e 65 2e 20 2a 2f 0d 73 |to a pla|ne. */.s|
|00003fc0| 74 61 74 69 63 20 44 42 | 4c 20 70 6f 69 6e 74 5f |tatic DB|L point_|
|00003fd0| 70 6c 61 6e 65 5f 64 69 | 73 74 61 6e 63 65 28 70 |plane_di|stance(p|
|00003fe0| 2c 20 6e 2c 20 64 29 0d | 56 45 43 54 4f 52 20 2a |, n, d).|VECTOR *|
|00003ff0| 70 2c 20 2a 6e 3b 0d 44 | 42 4c 20 2a 64 3b 0d 20 |p, *n;.D|BL *d;. |
|00004000| 20 7b 0d 20 20 44 42 4c | 20 74 65 6d 70 31 2c 20 | {. DBL| temp1, |
|00004010| 74 65 6d 70 32 3b 0d 0d | 20 20 56 44 6f 74 28 74 |temp2;..| VDot(t|
|00004020| 65 6d 70 31 2c 20 2a 70 | 2c 20 2a 6e 29 3b 0d 20 |emp1, *p|, *n);. |
|00004030| 20 74 65 6d 70 31 20 2b | 3d 20 2a 64 3b 0d 20 20 | temp1 +|= *d;. |
|00004040| 56 4c 65 6e 67 74 68 28 | 74 65 6d 70 32 2c 20 2a |VLength(|temp2, *|
|00004050| 6e 29 3b 0d 20 20 69 66 | 20 28 66 61 62 73 28 74 |n);. if| (fabs(t|
|00004060| 65 6d 70 32 29 20 3c 20 | 45 50 53 49 4c 4f 4e 29 |emp2) < |EPSILON)|
|00004070| 20 72 65 74 75 72 6e 20 | 30 3b 0d 20 20 74 65 6d | return |0;. tem|
|00004080| 70 31 20 2f 3d 20 74 65 | 6d 70 32 3b 0d 20 20 72 |p1 /= te|mp2;. r|
|00004090| 65 74 75 72 6e 20 74 65 | 6d 70 31 3b 0d 20 20 7d |eturn te|mp1;. }|
|000040a0| 0d 0d 73 74 61 74 69 63 | 20 69 6e 74 0d 62 65 7a |..static| int.bez|
|000040b0| 69 65 72 5f 73 75 62 70 | 61 74 63 68 5f 69 6e 74 |ier_subp|atch_int|
|000040c0| 65 72 73 65 63 74 28 72 | 61 79 2c 20 53 68 61 70 |ersect(r|ay, Shap|
|000040d0| 65 2c 20 50 61 74 63 68 | 2c 20 75 30 2c 20 75 31 |e, Patch|, u0, u1|
|000040e0| 2c 20 76 30 2c 20 76 31 | 2c 20 44 65 70 74 68 5f |, v0, v1|, Depth_|
|000040f0| 53 74 61 63 6b 29 0d 52 | 41 59 20 2a 72 61 79 3b |Stack).R|AY *ray;|
|00004100| 0d 42 49 43 55 42 49 43 | 5f 50 41 54 43 48 20 2a |.BICUBIC|_PATCH *|
|00004110| 53 68 61 70 65 3b 0d 56 | 45 43 54 4f 52 20 28 2a |Shape;.V|ECTOR (*|
|00004120| 50 61 74 63 68 29 5b 34 | 5d 5b 34 5d 3b 0d 44 42 |Patch)[4|][4];.DB|
|00004130| 4c 20 75 30 2c 20 75 31 | 2c 20 76 30 2c 20 76 31 |L u0, u1|, v0, v1|
|00004140| 3b 0d 49 53 54 41 43 4b | 20 2a 44 65 70 74 68 5f |;.ISTACK| *Depth_|
|00004150| 53 74 61 63 6b 3b 0d 20 | 20 7b 0d 20 20 69 6e 74 |Stack;. | {. int|
|00004160| 20 63 6e 74 20 3d 20 30 | 3b 0d 20 20 56 45 43 54 | cnt = 0|;. VECT|
|00004170| 4f 52 20 56 5b 33 5d 3b | 0d 20 20 44 42 4c 20 75 |OR V[3];|. DBL u|
|00004180| 2c 20 76 2c 20 44 65 70 | 74 68 2c 20 75 75 5b 33 |, v, Dep|th, uu[3|
|00004190| 5d 2c 20 76 76 5b 33 5d | 3b 0d 20 20 56 45 43 54 |], vv[3]|;. VECT|
|000041a0| 4f 52 20 50 2c 20 4e 3b | 0d 0d 20 20 56 5b 30 5d |OR P, N;|.. V[0]|
|000041b0| 20 3d 20 28 2a 50 61 74 | 63 68 29 5b 30 5d 5b 30 | = (*Pat|ch)[0][0|
|000041c0| 5d 3b 0d 20 20 56 5b 31 | 5d 20 3d 20 28 2a 50 61 |];. V[1|] = (*Pa|
|000041d0| 74 63 68 29 5b 30 5d 5b | 33 5d 3b 0d 20 20 56 5b |tch)[0][|3];. V[|
|000041e0| 32 5d 20 3d 20 28 2a 50 | 61 74 63 68 29 5b 33 5d |2] = (*P|atch)[3]|
|000041f0| 5b 33 5d 3b 0d 0d 20 20 | 75 75 5b 30 5d 20 3d 20 |[3];.. |uu[0] = |
|00004200| 75 30 3b 20 75 75 5b 31 | 5d 20 3d 20 75 30 3b 20 |u0; uu[1|] = u0; |
|00004210| 75 75 5b 32 5d 20 3d 20 | 75 31 3b 0d 20 20 76 76 |uu[2] = |u1;. vv|
|00004220| 5b 30 5d 20 3d 20 76 30 | 3b 20 76 76 5b 31 5d 20 |[0] = v0|; vv[1] |
|00004230| 3d 20 76 31 3b 20 76 76 | 5b 32 5d 20 3d 20 76 31 |= v1; vv|[2] = v1|
|00004240| 3b 0d 0d 20 20 69 66 20 | 28 69 6e 74 65 72 73 65 |;.. if |(interse|
|00004250| 63 74 5f 73 75 62 70 61 | 74 63 68 28 53 68 61 70 |ct_subpa|tch(Shap|
|00004260| 65 2c 20 72 61 79 2c 20 | 56 2c 20 75 75 2c 20 76 |e, ray, |V, uu, v|
|00004270| 76 2c 20 26 44 65 70 74 | 68 2c 20 26 50 2c 20 26 |v, &Dept|h, &P, &|
|00004280| 4e 2c 20 26 75 2c 20 26 | 76 29 29 20 0d 20 20 20 |N, &u, &|v)) . |
|00004290| 20 7b 0d 20 20 20 20 70 | 75 73 68 5f 6e 6f 72 6d | {. p|ush_norm|
|000042a0| 61 6c 5f 65 6e 74 72 79 | 28 44 65 70 74 68 2c 20 |al_entry|(Depth, |
|000042b0| 50 2c 20 4e 2c 20 28 4f | 42 4a 45 43 54 20 2a 29 |P, N, (O|BJECT *)|
|000042c0| 53 68 61 70 65 2c 20 44 | 65 70 74 68 5f 53 74 61 |Shape, D|epth_Sta|
|000042d0| 63 6b 29 3b 0d 20 20 20 | 20 63 6e 74 2b 2b 3b 0d |ck);. | cnt++;.|
|000042e0| 20 20 20 20 7d 0d 0d 20 | 20 56 5b 31 5d 20 3d 20 | }.. | V[1] = |
|000042f0| 56 5b 32 5d 3b 0d 20 20 | 56 5b 32 5d 20 3d 20 28 |V[2];. |V[2] = (|
|00004300| 2a 50 61 74 63 68 29 5b | 33 5d 5b 30 5d 3b 0d 20 |*Patch)[|3][0];. |
|00004310| 20 75 75 5b 31 5d 20 3d | 20 75 75 5b 32 5d 3b 20 | uu[1] =| uu[2]; |
|00004320| 75 75 5b 32 5d 20 3d 20 | 75 31 3b 0d 20 20 76 76 |uu[2] = |u1;. vv|
|00004330| 5b 31 5d 20 3d 20 76 76 | 5b 32 5d 3b 20 76 76 5b |[1] = vv|[2]; vv[|
|00004340| 32 5d 20 3d 20 76 30 3b | 0d 0d 20 20 69 66 20 28 |2] = v0;|.. if (|
|00004350| 69 6e 74 65 72 73 65 63 | 74 5f 73 75 62 70 61 74 |intersec|t_subpat|
|00004360| 63 68 28 53 68 61 70 65 | 2c 20 72 61 79 2c 20 56 |ch(Shape|, ray, V|
|00004370| 2c 20 75 75 2c 20 76 76 | 2c 20 26 44 65 70 74 68 |, uu, vv|, &Depth|
|00004380| 2c 20 26 50 2c 20 26 4e | 2c 20 26 75 2c 20 26 76 |, &P, &N|, &u, &v|
|00004390| 29 29 20 0d 20 20 20 20 | 7b 0d 20 20 20 20 70 75 |)) . |{. pu|
|000043a0| 73 68 5f 6e 6f 72 6d 61 | 6c 5f 65 6e 74 72 79 28 |sh_norma|l_entry(|
|000043b0| 44 65 70 74 68 2c 20 50 | 2c 20 4e 2c 20 28 4f 42 |Depth, P|, N, (OB|
|000043c0| 4a 45 43 54 20 2a 29 53 | 68 61 70 65 2c 20 44 65 |JECT *)S|hape, De|
|000043d0| 70 74 68 5f 53 74 61 63 | 6b 29 3b 0d 20 20 20 20 |pth_Stac|k);. |
|000043e0| 63 6e 74 2b 2b 3b 0d 20 | 20 20 20 7d 0d 0d 20 20 |cnt++;. | }.. |
|000043f0| 72 65 74 75 72 6e 20 63 | 6e 74 3b 0d 20 20 7d 0d |return c|nt;. }.|
|00004400| 0d 0d 73 74 61 74 69 63 | 20 76 6f 69 64 20 62 65 |..static| void be|
|00004410| 7a 69 65 72 5f 73 70 6c | 69 74 5f 6c 65 66 74 5f |zier_spl|it_left_|
|00004420| 72 69 67 68 74 28 50 61 | 74 63 68 2c 20 4c 65 66 |right(Pa|tch, Lef|
|00004430| 74 5f 50 61 74 63 68 2c | 20 52 69 67 68 74 5f 50 |t_Patch,| Right_P|
|00004440| 61 74 63 68 29 0d 56 45 | 43 54 4f 52 20 28 2a 50 |atch).VE|CTOR (*P|
|00004450| 61 74 63 68 29 5b 34 5d | 5b 34 5d 2c 20 28 2a 4c |atch)[4]|[4], (*L|
|00004460| 65 66 74 5f 50 61 74 63 | 68 29 5b 34 5d 5b 34 5d |eft_Patc|h)[4][4]|
|00004470| 2c 20 28 2a 52 69 67 68 | 74 5f 50 61 74 63 68 29 |, (*Righ|t_Patch)|
|00004480| 5b 34 5d 5b 34 5d 3b 0d | 20 20 7b 0d 20 20 56 45 |[4][4];.| {. VE|
|00004490| 43 54 4f 52 20 54 65 6d | 70 31 5b 34 5d 2c 20 54 |CTOR Tem|p1[4], T|
|000044a0| 65 6d 70 32 5b 34 5d 2c | 20 48 61 6c 66 3b 0d 20 |emp2[4],| Half;. |
|000044b0| 20 69 6e 74 20 69 2c 20 | 6a 3b 0d 20 20 66 6f 72 | int i, |j;. for|
|000044c0| 20 28 69 3d 30 3b 69 3c | 34 3b 69 2b 2b 29 20 0d | (i=0;i<|4;i++) .|
|000044d0| 20 20 20 20 7b 0d 20 20 | 20 20 54 65 6d 70 31 5b | {. | Temp1[|
|000044e0| 30 5d 20 3d 20 28 2a 50 | 61 74 63 68 29 5b 30 5d |0] = (*P|atch)[0]|
|000044f0| 5b 69 5d 3b 0d 20 20 20 | 20 56 48 61 6c 66 28 54 |[i];. | VHalf(T|
|00004500| 65 6d 70 31 5b 31 5d 2c | 20 28 2a 50 61 74 63 68 |emp1[1],| (*Patch|
|00004510| 29 5b 30 5d 5b 69 5d 2c | 20 28 2a 50 61 74 63 68 |)[0][i],| (*Patch|
|00004520| 29 5b 31 5d 5b 69 5d 29 | 3b 0d 20 20 20 20 56 48 |)[1][i])|;. VH|
|00004530| 61 6c 66 28 48 61 6c 66 | 2c 20 28 2a 50 61 74 63 |alf(Half|, (*Patc|
|00004540| 68 29 5b 31 5d 5b 69 5d | 2c 20 28 2a 50 61 74 63 |h)[1][i]|, (*Patc|
|00004550| 68 29 5b 32 5d 5b 69 5d | 29 3b 0d 20 20 20 20 56 |h)[2][i]|);. V|
|00004560| 48 61 6c 66 28 54 65 6d | 70 31 5b 32 5d 2c 20 54 |Half(Tem|p1[2], T|
|00004570| 65 6d 70 31 5b 31 5d 2c | 20 48 61 6c 66 29 3b 0d |emp1[1],| Half);.|
|00004580| 20 20 20 20 56 48 61 6c | 66 28 54 65 6d 70 32 5b | VHal|f(Temp2[|
|00004590| 32 5d 2c 20 28 2a 50 61 | 74 63 68 29 5b 32 5d 5b |2], (*Pa|tch)[2][|
|000045a0| 69 5d 2c 20 28 2a 50 61 | 74 63 68 29 5b 33 5d 5b |i], (*Pa|tch)[3][|
|000045b0| 69 5d 29 3b 0d 20 20 20 | 20 56 48 61 6c 66 28 54 |i]);. | VHalf(T|
|000045c0| 65 6d 70 32 5b 31 5d 2c | 20 48 61 6c 66 2c 20 54 |emp2[1],| Half, T|
|000045d0| 65 6d 70 32 5b 32 5d 29 | 3b 0d 20 20 20 20 56 48 |emp2[2])|;. VH|
|000045e0| 61 6c 66 28 54 65 6d 70 | 31 5b 33 5d 2c 20 54 65 |alf(Temp|1[3], Te|
|000045f0| 6d 70 31 5b 32 5d 2c 20 | 54 65 6d 70 32 5b 31 5d |mp1[2], |Temp2[1]|
|00004600| 29 3b 0d 20 20 20 20 54 | 65 6d 70 32 5b 30 5d 20 |);. T|emp2[0] |
|00004610| 3d 20 54 65 6d 70 31 5b | 33 5d 3b 0d 20 20 20 20 |= Temp1[|3];. |
|00004620| 54 65 6d 70 32 5b 33 5d | 20 3d 20 28 2a 50 61 74 |Temp2[3]| = (*Pat|
|00004630| 63 68 29 5b 33 5d 5b 69 | 5d 3b 0d 20 20 20 20 66 |ch)[3][i|];. f|
|00004640| 6f 72 20 28 6a 3d 30 3b | 6a 3c 34 3b 6a 2b 2b 29 |or (j=0;|j<4;j++)|
|00004650| 20 0d 20 20 20 20 20 20 | 7b 0d 20 20 20 20 20 20 | . |{. |
|00004660| 28 2a 4c 65 66 74 5f 50 | 61 74 63 68 29 5b 6a 5d |(*Left_P|atch)[j]|
|00004670| 5b 69 5d 20 20 3d 20 54 | 65 6d 70 31 5b 6a 5d 3b |[i] = T|emp1[j];|
|00004680| 0d 20 20 20 20 20 20 28 | 2a 52 69 67 68 74 5f 50 |. (|*Right_P|
|00004690| 61 74 63 68 29 5b 6a 5d | 5b 69 5d 20 3d 20 54 65 |atch)[j]|[i] = Te|
|000046a0| 6d 70 32 5b 6a 5d 3b 0d | 20 20 20 20 20 20 7d 0d |mp2[j];.| }.|
|000046b0| 20 20 20 20 7d 0d 20 20 | 7d 0d 0d 73 74 61 74 69 | }. |}..stati|
|000046c0| 63 20 76 6f 69 64 20 62 | 65 7a 69 65 72 5f 73 70 |c void b|ezier_sp|
|000046d0| 6c 69 74 5f 75 70 5f 64 | 6f 77 6e 28 50 61 74 63 |lit_up_d|own(Patc|
|000046e0| 68 2c 20 42 6f 74 74 6f | 6d 5f 50 61 74 63 68 2c |h, Botto|m_Patch,|
|000046f0| 20 54 6f 70 5f 50 61 74 | 63 68 29 0d 56 45 43 54 | Top_Pat|ch).VECT|
|00004700| 4f 52 20 28 2a 50 61 74 | 63 68 29 5b 34 5d 5b 34 |OR (*Pat|ch)[4][4|
|00004710| 5d 2c 20 28 2a 54 6f 70 | 5f 50 61 74 63 68 29 5b |], (*Top|_Patch)[|
|00004720| 34 5d 5b 34 5d 2c 20 28 | 2a 42 6f 74 74 6f 6d 5f |4][4], (|*Bottom_|
|00004730| 50 61 74 63 68 29 5b 34 | 5d 5b 34 5d 3b 0d 20 20 |Patch)[4|][4];. |
|00004740| 7b 0d 20 20 56 45 43 54 | 4f 52 20 54 65 6d 70 31 |{. VECT|OR Temp1|
|00004750| 5b 34 5d 2c 20 54 65 6d | 70 32 5b 34 5d 2c 20 48 |[4], Tem|p2[4], H|
|00004760| 61 6c 66 3b 0d 20 20 69 | 6e 74 20 69 2c 20 6a 3b |alf;. i|nt i, j;|
|00004770| 0d 0d 20 20 66 6f 72 20 | 28 69 3d 30 3b 69 3c 34 |.. for |(i=0;i<4|
|00004780| 3b 69 2b 2b 29 20 0d 20 | 20 20 20 7b 0d 20 20 20 |;i++) . | {. |
|00004790| 20 54 65 6d 70 31 5b 30 | 5d 20 3d 20 28 2a 50 61 | Temp1[0|] = (*Pa|
|000047a0| 74 63 68 29 5b 69 5d 5b | 30 5d 3b 0d 20 20 20 20 |tch)[i][|0];. |
|000047b0| 56 48 61 6c 66 28 54 65 | 6d 70 31 5b 31 5d 2c 20 |VHalf(Te|mp1[1], |
|000047c0| 28 2a 50 61 74 63 68 29 | 5b 69 5d 5b 30 5d 2c 20 |(*Patch)|[i][0], |
|000047d0| 28 2a 50 61 74 63 68 29 | 5b 69 5d 5b 31 5d 29 3b |(*Patch)|[i][1]);|
|000047e0| 0d 20 20 20 20 56 48 61 | 6c 66 28 48 61 6c 66 2c |. VHa|lf(Half,|
|000047f0| 20 28 2a 50 61 74 63 68 | 29 5b 69 5d 5b 31 5d 2c | (*Patch|)[i][1],|
|00004800| 20 28 2a 50 61 74 63 68 | 29 5b 69 5d 5b 32 5d 29 | (*Patch|)[i][2])|
|00004810| 3b 0d 20 20 20 20 56 48 | 61 6c 66 28 54 65 6d 70 |;. VH|alf(Temp|
|00004820| 31 5b 32 5d 2c 20 54 65 | 6d 70 31 5b 31 5d 2c 20 |1[2], Te|mp1[1], |
|00004830| 48 61 6c 66 29 3b 0d 20 | 20 20 20 56 48 61 6c 66 |Half);. | VHalf|
|00004840| 28 54 65 6d 70 32 5b 32 | 5d 2c 20 28 2a 50 61 74 |(Temp2[2|], (*Pat|
|00004850| 63 68 29 5b 69 5d 5b 32 | 5d 2c 20 28 2a 50 61 74 |ch)[i][2|], (*Pat|
|00004860| 63 68 29 5b 69 5d 5b 33 | 5d 29 3b 0d 20 20 20 20 |ch)[i][3|]);. |
|00004870| 56 48 61 6c 66 28 54 65 | 6d 70 32 5b 31 5d 2c 20 |VHalf(Te|mp2[1], |
|00004880| 48 61 6c 66 2c 20 54 65 | 6d 70 32 5b 32 5d 29 3b |Half, Te|mp2[2]);|
|00004890| 0d 20 20 20 20 56 48 61 | 6c 66 28 54 65 6d 70 31 |. VHa|lf(Temp1|
|000048a0| 5b 33 5d 2c 20 54 65 6d | 70 31 5b 32 5d 2c 20 54 |[3], Tem|p1[2], T|
|000048b0| 65 6d 70 32 5b 31 5d 29 | 3b 0d 20 20 20 20 54 65 |emp2[1])|;. Te|
|000048c0| 6d 70 32 5b 30 5d 20 3d | 20 54 65 6d 70 31 5b 33 |mp2[0] =| Temp1[3|
|000048d0| 5d 3b 0d 20 20 20 20 54 | 65 6d 70 32 5b 33 5d 20 |];. T|emp2[3] |
|000048e0| 3d 20 28 2a 50 61 74 63 | 68 29 5b 69 5d 5b 33 5d |= (*Patc|h)[i][3]|
|000048f0| 3b 0d 20 20 20 20 66 6f | 72 20 28 6a 3d 30 3b 6a |;. fo|r (j=0;j|
|00004900| 3c 34 3b 6a 2b 2b 29 20 | 0d 20 20 20 20 20 20 7b |<4;j++) |. {|
|00004910| 0d 20 20 20 20 20 20 28 | 2a 42 6f 74 74 6f 6d 5f |. (|*Bottom_|
|00004920| 50 61 74 63 68 29 5b 69 | 5d 5b 6a 5d 20 3d 20 54 |Patch)[i|][j] = T|
|00004930| 65 6d 70 31 5b 6a 5d 3b | 0d 20 20 20 20 20 20 28 |emp1[j];|. (|
|00004940| 2a 54 6f 70 5f 50 61 74 | 63 68 29 5b 69 5d 5b 6a |*Top_Pat|ch)[i][j|
|00004950| 5d 20 20 20 20 3d 20 54 | 65 6d 70 32 5b 6a 5d 3b |] = T|emp2[j];|
|00004960| 0d 20 20 20 20 20 20 7d | 0d 20 20 20 20 7d 0d 20 |. }|. }. |
|00004970| 20 7d 0d 0d 2f 2a 20 53 | 65 65 20 68 6f 77 20 63 | }../* S|ee how c|
|00004980| 6c 6f 73 65 20 74 6f 20 | 61 20 70 6c 61 6e 65 20 |lose to |a plane |
|00004990| 61 20 73 75 62 70 61 74 | 63 68 20 69 73 2c 20 74 |a subpat|ch is, t|
|000049a0| 68 65 20 70 61 74 63 68 | 20 6d 75 73 74 20 68 61 |he patch| must ha|
|000049b0| 76 65 20 61 74 20 6c 65 | 61 73 74 0d 20 20 20 74 |ve at le|ast. t|
|000049c0| 68 72 65 65 20 64 69 73 | 74 69 6e 63 74 20 76 65 |hree dis|tinct ve|
|000049d0| 72 74 69 63 65 73 2e 20 | 41 20 6e 65 67 61 74 69 |rtices. |A negati|
|000049e0| 76 65 20 72 65 73 75 6c | 74 20 66 72 6f 6d 20 74 |ve resul|t from t|
|000049f0| 68 69 73 20 66 75 6e 63 | 74 69 6f 6e 20 69 6e 64 |his func|tion ind|
|00004a00| 69 63 61 74 65 73 0d 20 | 20 20 74 68 61 74 20 61 |icates. | that a|
|00004a10| 20 64 65 67 65 6e 65 72 | 61 74 65 20 76 61 6c 75 | degener|ate valu|
|00004a20| 65 20 6f 66 20 73 6f 6d | 65 20 73 6f 72 74 20 77 |e of som|e sort w|
|00004a30| 61 73 20 65 6e 63 6f 75 | 6e 74 65 72 65 64 2e 20 |as encou|ntered. |
|00004a40| 2a 2f 0d 73 74 61 74 69 | 63 20 44 42 4c 20 64 65 |*/.stati|c DBL de|
|00004a50| 74 65 72 6d 69 6e 65 5f | 73 75 62 70 61 74 63 68 |termine_|subpatch|
|00004a60| 5f 66 6c 61 74 6e 65 73 | 73 28 50 61 74 63 68 29 |_flatnes|s(Patch)|
|00004a70| 0d 56 45 43 54 4f 52 20 | 28 2a 50 61 74 63 68 29 |.VECTOR |(*Patch)|
|00004a80| 5b 34 5d 5b 34 5d 3b 0d | 20 20 7b 0d 20 20 56 45 |[4][4];.| {. VE|
|00004a90| 43 54 4f 52 20 76 65 72 | 74 69 63 65 73 5b 34 5d |CTOR ver|tices[4]|
|00004aa0| 2c 20 6e 2c 20 54 65 6d | 70 56 3b 0d 20 20 44 42 |, n, Tem|pV;. DB|
|00004ab0| 4c 20 64 2c 20 64 69 73 | 74 2c 20 74 65 6d 70 31 |L d, dis|t, temp1|
|00004ac0| 3b 0d 20 20 69 6e 74 20 | 69 2c 20 6a 3b 0d 0d 20 |;. int |i, j;.. |
|00004ad0| 20 76 65 72 74 69 63 65 | 73 5b 30 5d 20 3d 20 28 | vertice|s[0] = (|
|00004ae0| 2a 50 61 74 63 68 29 5b | 30 5d 5b 30 5d 3b 0d 20 |*Patch)[|0][0];. |
|00004af0| 20 76 65 72 74 69 63 65 | 73 5b 31 5d 20 3d 20 28 | vertice|s[1] = (|
|00004b00| 2a 50 61 74 63 68 29 5b | 30 5d 5b 33 5d 3b 0d 20 |*Patch)[|0][3];. |
|00004b10| 20 56 53 75 62 28 54 65 | 6d 70 56 2c 20 76 65 72 | VSub(Te|mpV, ver|
|00004b20| 74 69 63 65 73 5b 30 5d | 2c 20 76 65 72 74 69 63 |tices[0]|, vertic|
|00004b30| 65 73 5b 31 5d 29 3b 0d | 20 20 56 4c 65 6e 67 74 |es[1]);.| VLengt|
|00004b40| 68 28 74 65 6d 70 31 2c | 20 54 65 6d 70 56 29 3b |h(temp1,| TempV);|
|00004b50| 0d 20 20 69 66 20 28 66 | 61 62 73 28 74 65 6d 70 |. if (f|abs(temp|
|00004b60| 31 29 20 3c 20 45 50 53 | 49 4c 4f 4e 29 20 0d 20 |1) < EPS|ILON) . |
|00004b70| 20 20 20 7b 0d 20 20 20 | 20 2f 2a 20 44 65 67 65 | {. | /* Dege|
|00004b80| 6e 65 72 61 74 65 20 69 | 6e 20 74 68 65 20 56 20 |nerate i|n the V |
|00004b90| 64 69 72 65 63 74 69 6f | 6e 20 66 6f 72 20 55 20 |directio|n for U |
|00004ba0| 3d 20 30 2e 20 54 68 69 | 73 20 69 73 20 6f 6b 20 |= 0. Thi|s is ok |
|00004bb0| 69 66 20 74 68 65 20 6f | 74 68 65 72 0d 20 20 20 |if the o|ther. |
|00004bc0| 20 20 20 20 20 20 74 77 | 6f 20 63 6f 72 6e 65 72 | tw|o corner|
|00004bd0| 73 20 61 72 65 20 64 69 | 73 74 69 6e 63 74 20 66 |s are di|stinct f|
|00004be0| 72 6f 6d 20 74 68 65 20 | 6c 6f 77 65 72 20 6c 65 |rom the |lower le|
|00004bf0| 66 74 20 63 6f 72 6e 65 | 72 20 2d 20 49 27 6d 20 |ft corne|r - I'm |
|00004c00| 73 75 72 65 20 74 68 65 | 72 65 0d 20 20 20 20 20 |sure the|re. |
|00004c10| 20 20 20 20 61 72 65 20 | 63 61 73 65 73 20 77 68 | are |cases wh|
|00004c20| 65 72 65 20 74 68 65 20 | 63 6f 72 6e 65 72 73 20 |ere the |corners |
|00004c30| 63 6f 69 6e 63 69 64 65 | 20 61 6e 64 20 74 68 65 |coincide| and the|
|00004c40| 20 6d 69 64 64 6c 65 20 | 68 61 73 20 67 6f 6f 64 | middle |has good|
|00004c50| 20 76 61 6c 75 65 73 2c | 0d 20 20 20 20 20 20 20 | values,|. |
|00004c60| 20 20 62 75 74 20 74 68 | 61 74 20 69 73 20 73 6f | but th|at is so|
|00004c70| 6d 65 77 68 61 74 20 70 | 61 74 68 61 6c 6f 67 69 |mewhat p|athalogi|
|00004c80| 63 61 6c 20 61 6e 64 20 | 77 6f 6e 27 74 20 62 65 |cal and |won't be|
|00004c90| 20 63 6f 6e 73 69 64 65 | 72 65 64 2e 20 2a 2f 0d | conside|red. */.|
|00004ca0| 20 20 20 20 76 65 72 74 | 69 63 65 73 5b 31 5d 20 | vert|ices[1] |
|00004cb0| 3d 20 28 2a 50 61 74 63 | 68 29 5b 33 5d 5b 33 5d |= (*Patc|h)[3][3]|
|00004cc0| 3b 0d 20 20 20 20 56 53 | 75 62 28 54 65 6d 70 56 |;. VS|ub(TempV|
|00004cd0| 2c 20 76 65 72 74 69 63 | 65 73 5b 30 5d 2c 20 76 |, vertic|es[0], v|
|00004ce0| 65 72 74 69 63 65 73 5b | 31 5d 29 3b 0d 20 20 20 |ertices[|1]);. |
|00004cf0| 20 56 4c 65 6e 67 74 68 | 28 74 65 6d 70 31 2c 20 | VLength|(temp1, |
|00004d00| 54 65 6d 70 56 29 3b 0d | 20 20 20 20 69 66 20 28 |TempV);.| if (|
|00004d10| 66 61 62 73 28 74 65 6d | 70 31 29 20 3c 20 45 50 |fabs(tem|p1) < EP|
|00004d20| 53 49 4c 4f 4e 29 20 72 | 65 74 75 72 6e 20 2d 31 |SILON) r|eturn -1|
|00004d30| 2e 30 3b 0d 20 20 20 20 | 76 65 72 74 69 63 65 73 |.0;. |vertices|
|00004d40| 5b 32 5d 20 3d 20 28 2a | 50 61 74 63 68 29 5b 33 |[2] = (*|Patch)[3|
|00004d50| 5d 5b 30 5d 3b 0d 20 20 | 20 20 56 53 75 62 28 54 |][0];. | VSub(T|
|00004d60| 65 6d 70 56 2c 20 76 65 | 72 74 69 63 65 73 5b 30 |empV, ve|rtices[0|
|00004d70| 5d 2c 20 76 65 72 74 69 | 63 65 73 5b 31 5d 29 3b |], verti|ces[1]);|
|00004d80| 0d 20 20 20 20 56 4c 65 | 6e 67 74 68 28 74 65 6d |. VLe|ngth(tem|
|00004d90| 70 31 2c 20 54 65 6d 70 | 56 29 3b 0d 20 20 20 20 |p1, Temp|V);. |
|00004da0| 69 66 20 28 66 61 62 73 | 28 74 65 6d 70 31 29 20 |if (fabs|(temp1) |
|00004db0| 3c 20 45 50 53 49 4c 4f | 4e 29 20 72 65 74 75 72 |< EPSILO|N) retur|
|00004dc0| 6e 20 2d 31 2e 30 3b 0d | 20 20 20 20 56 53 75 62 |n -1.0;.| VSub|
|00004dd0| 28 54 65 6d 70 56 2c 20 | 76 65 72 74 69 63 65 73 |(TempV, |vertices|
|00004de0| 5b 31 5d 2c 20 76 65 72 | 74 69 63 65 73 5b 32 5d |[1], ver|tices[2]|
|00004df0| 29 3b 0d 20 20 20 20 56 | 4c 65 6e 67 74 68 28 74 |);. V|Length(t|
|00004e00| 65 6d 70 31 2c 20 54 65 | 6d 70 56 29 3b 0d 20 20 |emp1, Te|mpV);. |
|00004e10| 20 20 69 66 20 28 66 61 | 62 73 28 74 65 6d 70 31 | if (fa|bs(temp1|
|00004e20| 29 20 3c 20 45 50 53 49 | 4c 4f 4e 29 20 72 65 74 |) < EPSI|LON) ret|
|00004e30| 75 72 6e 20 2d 31 2e 30 | 3b 0d 20 20 20 20 7d 0d |urn -1.0|;. }.|
|00004e40| 20 20 65 6c 73 65 20 0d | 20 20 20 20 7b 0d 20 20 | else .| {. |
|00004e50| 20 20 76 65 72 74 69 63 | 65 73 5b 32 5d 20 3d 20 | vertic|es[2] = |
|00004e60| 28 2a 50 61 74 63 68 29 | 5b 33 5d 5b 30 5d 3b 0d |(*Patch)|[3][0];.|
|00004e70| 20 20 20 20 56 53 75 62 | 28 54 65 6d 70 56 2c 20 | VSub|(TempV, |
|00004e80| 76 65 72 74 69 63 65 73 | 5b 30 5d 2c 20 76 65 72 |vertices|[0], ver|
|00004e90| 74 69 63 65 73 5b 31 5d | 29 3b 0d 20 20 20 20 56 |tices[1]|);. V|
|00004ea0| 4c 65 6e 67 74 68 28 74 | 65 6d 70 31 2c 20 54 65 |Length(t|emp1, Te|
|00004eb0| 6d 70 56 29 3b 0d 20 20 | 20 20 69 66 20 28 66 61 |mpV);. | if (fa|
|00004ec0| 62 73 28 74 65 6d 70 31 | 29 20 3c 20 45 50 53 49 |bs(temp1|) < EPSI|
|00004ed0| 4c 4f 4e 29 20 0d 20 20 | 20 20 20 20 7b 0d 20 20 |LON) . | {. |
|00004ee0| 20 20 20 20 76 65 72 74 | 69 63 65 73 5b 32 5d 20 | vert|ices[2] |
|00004ef0| 3d 20 28 2a 50 61 74 63 | 68 29 5b 33 5d 5b 33 5d |= (*Patc|h)[3][3]|
|00004f00| 3b 0d 20 20 20 20 20 20 | 56 53 75 62 28 54 65 6d |;. |VSub(Tem|
|00004f10| 70 56 2c 20 76 65 72 74 | 69 63 65 73 5b 30 5d 2c |pV, vert|ices[0],|
|00004f20| 20 76 65 72 74 69 63 65 | 73 5b 32 5d 29 3b 0d 20 | vertice|s[2]);. |
|00004f30| 20 20 20 20 20 56 4c 65 | 6e 67 74 68 28 74 65 6d | VLe|ngth(tem|
|00004f40| 70 31 2c 20 54 65 6d 70 | 56 29 3b 0d 20 20 20 20 |p1, Temp|V);. |
|00004f50| 20 20 69 66 20 28 66 61 | 62 73 28 74 65 6d 70 31 | if (fa|bs(temp1|
|00004f60| 29 20 3c 20 45 50 53 49 | 4c 4f 4e 29 0d 20 20 20 |) < EPSI|LON). |
|00004f70| 20 20 20 20 20 72 65 74 | 75 72 6e 20 2d 31 2e 30 | ret|urn -1.0|
|00004f80| 3b 0d 20 20 20 20 20 20 | 56 53 75 62 28 54 65 6d |;. |VSub(Tem|
|00004f90| 70 56 2c 20 76 65 72 74 | 69 63 65 73 5b 31 5d 2c |pV, vert|ices[1],|
|00004fa0| 20 76 65 72 74 69 63 65 | 73 5b 32 5d 29 3b 0d 20 | vertice|s[2]);. |
|00004fb0| 20 20 20 20 20 56 4c 65 | 6e 67 74 68 28 74 65 6d | VLe|ngth(tem|
|00004fc0| 70 31 2c 20 54 65 6d 70 | 56 29 3b 0d 20 20 20 20 |p1, Temp|V);. |
|00004fd0| 20 20 69 66 20 28 66 61 | 62 73 28 74 65 6d 70 31 | if (fa|bs(temp1|
|00004fe0| 29 20 3c 20 45 50 53 49 | 4c 4f 4e 29 0d 20 20 20 |) < EPSI|LON). |
|00004ff0| 20 20 20 20 20 72 65 74 | 75 72 6e 20 2d 31 2e 30 | ret|urn -1.0|
|00005000| 3b 0d 20 20 20 20 20 20 | 7d 0d 20 20 20 20 65 6c |;. |}. el|
|00005010| 73 65 20 0d 20 20 20 20 | 20 20 7b 0d 20 20 20 20 |se . | {. |
|00005020| 20 20 56 53 75 62 28 54 | 65 6d 70 56 2c 20 76 65 | VSub(T|empV, ve|
|00005030| 72 74 69 63 65 73 5b 31 | 5d 2c 20 76 65 72 74 69 |rtices[1|], verti|
|00005040| 63 65 73 5b 32 5d 29 3b | 0d 20 20 20 20 20 20 56 |ces[2]);|. V|
|00005050| 4c 65 6e 67 74 68 28 74 | 65 6d 70 31 2c 20 54 65 |Length(t|emp1, Te|
|00005060| 6d 70 56 29 3b 0d 20 20 | 20 20 20 20 69 66 20 28 |mpV);. | if (|
|00005070| 66 61 62 73 28 74 65 6d | 70 31 29 20 3c 20 45 50 |fabs(tem|p1) < EP|
|00005080| 53 49 4c 4f 4e 29 0d 20 | 20 20 20 20 20 20 20 72 |SILON). | r|
|00005090| 65 74 75 72 6e 20 2d 31 | 2e 30 3b 0d 20 20 20 20 |eturn -1|.0;. |
|000050a0| 20 20 7d 0d 20 20 20 20 | 7d 0d 20 20 2f 2a 20 4e | }. |}. /* N|
|000050b0| 6f 77 20 74 68 61 74 20 | 61 20 67 6f 6f 64 20 73 |ow that |a good s|
|000050c0| 65 74 20 6f 66 20 63 61 | 6e 64 69 64 61 74 65 20 |et of ca|ndidate |
|000050d0| 70 6f 69 6e 74 73 20 68 | 61 73 20 62 65 65 6e 20 |points h|as been |
|000050e0| 66 6f 75 6e 64 2c 20 66 | 69 6e 64 20 74 68 65 0d |found, f|ind the.|
|000050f0| 20 20 20 20 20 20 70 6c | 61 6e 65 20 65 71 75 61 | pl|ane equa|
|00005100| 74 69 6f 6e 73 20 66 6f | 72 20 74 68 65 20 70 61 |tions fo|r the pa|
|00005110| 74 63 68 20 2a 2f 0d 20 | 20 69 66 20 28 73 75 62 |tch */. | if (sub|
|00005120| 70 61 74 63 68 5f 6e 6f | 72 6d 61 6c 28 26 76 65 |patch_no|rmal(&ve|
|00005130| 72 74 69 63 65 73 5b 30 | 5d 2c 20 26 76 65 72 74 |rtices[0|], &vert|
|00005140| 69 63 65 73 5b 31 5d 2c | 20 26 76 65 72 74 69 63 |ices[1],| &vertic|
|00005150| 65 73 5b 32 5d 2c 20 26 | 6e 2c 20 26 64 29 29 20 |es[2], &|n, &d)) |
|00005160| 0d 20 20 20 20 7b 0d 20 | 20 20 20 2f 2a 20 53 74 |. {. | /* St|
|00005170| 65 70 20 74 68 72 6f 75 | 67 68 20 61 6c 6c 20 76 |ep throu|gh all v|
|00005180| 65 72 74 69 63 65 73 20 | 61 6e 64 20 73 65 65 20 |ertices |and see |
|00005190| 77 68 61 74 20 74 68 65 | 20 6d 61 78 69 6d 75 6d |what the| maximum|
|000051a0| 20 64 69 73 74 61 6e 63 | 65 20 66 72 6f 6d 20 74 | distanc|e from t|
|000051b0| 68 65 0d 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |he. | |
|000051c0| 70 6c 61 6e 65 20 68 61 | 70 70 65 6e 73 20 74 6f |plane ha|ppens to|
|000051d0| 20 62 65 2e 20 2a 2f 0d | 20 20 20 20 64 69 73 74 | be. */.| dist|
|000051e0| 20 3d 20 30 2e 30 3b 0d | 20 20 20 20 66 6f 72 20 | = 0.0;.| for |
|000051f0| 28 69 3d 30 3b 69 3c 34 | 3b 69 2b 2b 29 20 0d 20 |(i=0;i<4|;i++) . |
|00005200| 20 20 20 20 20 7b 0d 20 | 20 20 20 20 20 66 6f 72 | {. | for|
|00005210| 20 28 6a 3d 30 3b 6a 3c | 34 3b 6a 2b 2b 29 20 0d | (j=0;j<|4;j++) .|
|00005220| 20 20 20 20 20 20 20 20 | 7b 0d 20 20 20 20 20 20 | |{. |
|00005230| 20 20 74 65 6d 70 31 20 | 3d 20 66 61 62 73 28 70 | temp1 |= fabs(p|
|00005240| 6f 69 6e 74 5f 70 6c 61 | 6e 65 5f 64 69 73 74 61 |oint_pla|ne_dista|
|00005250| 6e 63 65 28 26 28 28 2a | 50 61 74 63 68 29 5b 69 |nce(&((*|Patch)[i|
|00005260| 5d 5b 6a 5d 29 2c 20 26 | 6e 2c 20 26 64 29 29 3b |][j]), &|n, &d));|
|00005270| 0d 20 20 20 20 20 20 20 | 20 69 66 20 28 74 65 6d |. | if (tem|
|00005280| 70 31 20 3e 20 64 69 73 | 74 29 0d 20 20 20 20 20 |p1 > dis|t). |
|00005290| 20 20 20 20 20 64 69 73 | 74 20 3d 20 74 65 6d 70 | dis|t = temp|
|000052a0| 31 3b 0d 20 20 20 20 20 | 20 20 20 7d 0d 20 20 20 |1;. | }. |
|000052b0| 20 20 20 7d 0d 20 20 20 | 20 72 65 74 75 72 6e 20 | }. | return |
|000052c0| 64 69 73 74 3b 0d 20 20 | 20 20 7d 0d 20 20 65 6c |dist;. | }. el|
|000052d0| 73 65 20 0d 20 20 20 20 | 7b 0d 20 20 20 20 69 66 |se . |{. if|
|000052e0| 20 28 4f 70 74 69 6f 6e | 73 20 26 20 44 45 42 55 | (Option|s & DEBU|
|000052f0| 47 47 49 4e 47 29 20 0d | 20 20 20 20 20 20 7b 0d |GGING) .| {.|
|00005300| 20 20 20 20 20 20 70 72 | 69 6e 74 66 28 22 53 75 | pr|intf("Su|
|00005310| 62 70 61 74 63 68 20 6e | 6f 72 6d 61 6c 20 66 61 |bpatch n|ormal fa|
|00005320| 69 6c 65 64 20 69 6e 20 | 64 65 74 65 72 6d 69 6e |iled in |determin|
|00005330| 65 5f 73 75 62 70 61 74 | 63 68 5f 66 6c 61 74 6e |e_subpat|ch_flatn|
|00005340| 65 73 73 5c 6e 22 29 3b | 0d 20 20 20 20 20 20 66 |ess\n");|. f|
|00005350| 66 6c 75 73 68 28 73 74 | 64 6f 75 74 29 3b 0d 20 |flush(st|dout);. |
|00005360| 20 20 20 20 20 7d 0d 20 | 20 20 20 72 65 74 75 72 | }. | retur|
|00005370| 6e 20 2d 31 2e 30 3b 0d | 20 20 20 20 7d 0d 20 20 |n -1.0;.| }. |
|00005380| 7d 0d 0d 73 74 61 74 69 | 63 20 69 6e 74 20 66 6c |}..stati|c int fl|
|00005390| 61 74 5f 65 6e 6f 75 67 | 68 28 4f 62 6a 65 63 74 |at_enoug|h(Object|
|000053a0| 2c 20 50 61 74 63 68 29 | 0d 42 49 43 55 42 49 43 |, Patch)|.BICUBIC|
|000053b0| 5f 50 41 54 43 48 20 2a | 4f 62 6a 65 63 74 3b 0d |_PATCH *|Object;.|
|000053c0| 56 45 43 54 4f 52 20 28 | 2a 50 61 74 63 68 29 5b |VECTOR (|*Patch)[|
|000053d0| 34 5d 5b 34 5d 3b 0d 20 | 20 7b 0d 20 20 44 42 4c |4][4];. | {. DBL|
|000053e0| 20 44 69 73 74 3b 0d 0d | 20 20 44 69 73 74 20 3d | Dist;..| Dist =|
|000053f0| 20 64 65 74 65 72 6d 69 | 6e 65 5f 73 75 62 70 61 | determi|ne_subpa|
|00005400| 74 63 68 5f 66 6c 61 74 | 6e 65 73 73 28 50 61 74 |tch_flat|ness(Pat|
|00005410| 63 68 29 3b 0d 20 20 69 | 66 20 28 44 69 73 74 20 |ch);. i|f (Dist |
|00005420| 3c 20 30 2e 30 29 0d 20 | 20 20 20 72 65 74 75 72 |< 0.0). | retur|
|00005430| 6e 20 30 3b 0d 20 20 65 | 6c 73 65 20 69 66 20 28 |n 0;. e|lse if (|
|00005440| 44 69 73 74 20 3c 20 4f | 62 6a 65 63 74 2d 3e 46 |Dist < O|bject->F|
|00005450| 6c 61 74 6e 65 73 73 5f | 56 61 6c 75 65 29 0d 20 |latness_|Value). |
|00005460| 20 20 20 72 65 74 75 72 | 6e 20 31 3b 0d 20 20 65 | retur|n 1;. e|
|00005470| 6c 73 65 0d 20 20 20 20 | 72 65 74 75 72 6e 20 30 |lse. |return 0|
|00005480| 3b 0d 20 20 7d 0d 0d 73 | 74 61 74 69 63 20 69 6e |;. }..s|tatic in|
|00005490| 74 20 62 65 7a 69 65 72 | 5f 73 75 62 64 69 76 69 |t bezier|_subdivi|
|000054a0| 64 65 72 28 52 61 79 2c | 20 4f 62 6a 65 63 74 2c |der(Ray,| Object,|
|000054b0| 20 50 61 74 63 68 2c 20 | 75 30 2c 20 75 31 2c 20 | Patch, |u0, u1, |
|000054c0| 76 30 2c 20 76 31 2c 0d | 72 65 63 75 72 73 69 6f |v0, v1,.|recursio|
|000054d0| 6e 5f 64 65 70 74 68 2c | 20 44 65 70 74 68 5f 53 |n_depth,| Depth_S|
|000054e0| 74 61 63 6b 29 0d 52 41 | 59 20 2a 52 61 79 3b 0d |tack).RA|Y *Ray;.|
|000054f0| 42 49 43 55 42 49 43 5f | 50 41 54 43 48 20 2a 4f |BICUBIC_|PATCH *O|
|00005500| 62 6a 65 63 74 3b 0d 56 | 45 43 54 4f 52 20 28 2a |bject;.V|ECTOR (*|
|00005510| 50 61 74 63 68 29 5b 34 | 5d 5b 34 5d 3b 0d 44 42 |Patch)[4|][4];.DB|
|00005520| 4c 20 75 30 2c 20 75 31 | 2c 20 76 30 2c 20 76 31 |L u0, u1|, v0, v1|
|00005530| 3b 0d 69 6e 74 20 72 65 | 63 75 72 73 69 6f 6e 5f |;.int re|cursion_|
|00005540| 64 65 70 74 68 3b 0d 49 | 53 54 41 43 4b 20 2a 44 |depth;.I|STACK *D|
|00005550| 65 70 74 68 5f 53 74 61 | 63 6b 3b 0d 20 20 7b 0d |epth_Sta|ck;. {.|
|00005560| 20 20 56 45 43 54 4f 52 | 20 4c 6f 77 65 72 5f 4c | VECTOR| Lower_L|
|00005570| 65 66 74 5b 34 5d 5b 34 | 5d 2c 20 4c 6f 77 65 72 |eft[4][4|], Lower|
|00005580| 5f 52 69 67 68 74 5b 34 | 5d 5b 34 5d 3b 0d 20 20 |_Right[4|][4];. |
|00005590| 56 45 43 54 4f 52 20 55 | 70 70 65 72 5f 4c 65 66 |VECTOR U|pper_Lef|
|000055a0| 74 5b 34 5d 5b 34 5d 2c | 20 55 70 70 65 72 5f 52 |t[4][4],| Upper_R|
|000055b0| 69 67 68 74 5b 34 5d 5b | 34 5d 3b 0d 20 20 56 45 |ight[4][|4];. VE|
|000055c0| 43 54 4f 52 20 63 65 6e | 74 65 72 3b 0d 20 20 44 |CTOR cen|ter;. D|
|000055d0| 42 4c 20 75 74 2c 20 76 | 74 2c 20 72 61 64 69 75 |BL ut, v|t, radiu|
|000055e0| 73 3b 0d 20 20 69 6e 74 | 20 63 6e 74 20 3d 20 30 |s;. int| cnt = 0|
|000055f0| 3b 0d 0d 20 20 2f 2a 20 | 4d 61 6b 65 20 73 75 72 |;.. /* |Make sur|
|00005600| 65 20 74 68 65 20 72 61 | 79 20 70 61 73 73 65 73 |e the ra|y passes|
|00005610| 20 74 68 72 6f 75 67 68 | 20 61 20 73 70 68 65 72 | through| a spher|
|00005620| 65 20 62 6f 75 6e 64 69 | 6e 67 20 74 68 65 20 63 |e boundi|ng the c|
|00005630| 6f 6e 74 72 6f 6c 20 70 | 6f 69 6e 74 73 20 6f 66 |ontrol p|oints of|
|00005640| 0d 20 20 20 20 20 20 74 | 68 65 20 70 61 74 63 68 |. t|he patch|
|00005650| 20 2a 2f 0d 20 20 62 65 | 7a 69 65 72 5f 62 6f 75 | */. be|zier_bou|
|00005660| 6e 64 69 6e 67 5f 73 70 | 68 65 72 65 28 50 61 74 |nding_sp|here(Pat|
|00005670| 63 68 2c 20 26 63 65 6e | 74 65 72 2c 20 26 72 61 |ch, &cen|ter, &ra|
|00005680| 64 69 75 73 29 3b 0d 20 | 20 69 66 20 28 21 73 70 |dius);. | if (!sp|
|00005690| 68 65 72 69 63 61 6c 5f | 62 6f 75 6e 64 73 5f 63 |herical_|bounds_c|
|000056a0| 68 65 63 6b 28 52 61 79 | 2c 20 26 63 65 6e 74 65 |heck(Ray|, &cente|
|000056b0| 72 2c 20 72 61 64 69 75 | 73 29 29 0d 20 20 20 20 |r, radiu|s)). |
|000056c0| 72 65 74 75 72 6e 20 30 | 3b 0d 0d 20 20 2f 2a 20 |return 0|;.. /* |
|000056d0| 49 66 20 74 68 65 20 70 | 61 74 63 68 20 69 73 20 |If the p|atch is |
|000056e0| 63 6c 6f 73 65 20 74 6f | 20 62 65 69 6e 67 20 66 |close to| being f|
|000056f0| 6c 61 74 2c 20 74 68 65 | 6e 20 6a 75 73 74 20 70 |lat, the|n just p|
|00005700| 65 72 66 6f 72 6d 20 61 | 20 72 61 79 2d 70 6c 61 |erform a| ray-pla|
|00005710| 6e 65 0d 20 20 20 20 20 | 20 69 6e 74 65 72 73 65 |ne. | interse|
|00005720| 63 74 69 6f 6e 20 74 65 | 73 74 2e 20 2a 2f 0d 20 |ction te|st. */. |
|00005730| 20 69 66 20 28 66 6c 61 | 74 5f 65 6e 6f 75 67 68 | if (fla|t_enough|
|00005740| 28 4f 62 6a 65 63 74 2c | 20 50 61 74 63 68 29 29 |(Object,| Patch))|
|00005750| 0d 20 20 20 20 72 65 74 | 75 72 6e 20 62 65 7a 69 |. ret|urn bezi|
|00005760| 65 72 5f 73 75 62 70 61 | 74 63 68 5f 69 6e 74 65 |er_subpa|tch_inte|
|00005770| 72 73 65 63 74 28 52 61 | 79 2c 20 4f 62 6a 65 63 |rsect(Ra|y, Objec|
|00005780| 74 2c 20 50 61 74 63 68 | 2c 20 75 30 2c 20 75 31 |t, Patch|, u0, u1|
|00005790| 2c 20 76 30 2c 20 76 31 | 2c 0d 09 09 09 09 20 20 |, v0, v1|,..... |
|000057a0| 20 20 20 44 65 70 74 68 | 5f 53 74 61 63 6b 29 3b | Depth|_Stack);|
|000057b0| 0d 0d 20 20 69 66 20 28 | 72 65 63 75 72 73 69 6f |.. if (|recursio|
|000057c0| 6e 5f 64 65 70 74 68 20 | 3e 3d 20 4f 62 6a 65 63 |n_depth |>= Objec|
|000057d0| 74 2d 3e 55 5f 53 74 65 | 70 73 29 0d 20 20 20 20 |t->U_Ste|ps). |
|000057e0| 69 66 20 28 72 65 63 75 | 72 73 69 6f 6e 5f 64 65 |if (recu|rsion_de|
|000057f0| 70 74 68 20 3e 3d 20 4f | 62 6a 65 63 74 2d 3e 56 |pth >= O|bject->V|
|00005800| 5f 53 74 65 70 73 29 0d | 20 20 20 20 20 20 20 72 |_Steps).| r|
|00005810| 65 74 75 72 6e 20 62 65 | 7a 69 65 72 5f 73 75 62 |eturn be|zier_sub|
|00005820| 70 61 74 63 68 5f 69 6e | 74 65 72 73 65 63 74 28 |patch_in|tersect(|
|00005830| 52 61 79 2c 20 4f 62 6a | 65 63 74 2c 20 50 61 74 |Ray, Obj|ect, Pat|
|00005840| 63 68 2c 20 75 30 2c 20 | 75 31 2c 20 76 30 2c 20 |ch, u0, |u1, v0, |
|00005850| 76 31 2c 0d 09 09 09 09 | 09 44 65 70 74 68 5f 53 |v1,.....|.Depth_S|
|00005860| 74 61 63 6b 29 3b 0d 20 | 20 20 20 65 6c 73 65 20 |tack);. | else |
|00005870| 0d 20 20 20 20 20 20 7b | 0d 20 20 20 20 20 20 62 |. {|. b|
|00005880| 65 7a 69 65 72 5f 73 70 | 6c 69 74 5f 75 70 5f 64 |ezier_sp|lit_up_d|
|00005890| 6f 77 6e 28 50 61 74 63 | 68 2c 20 28 56 45 43 54 |own(Patc|h, (VECT|
|000058a0| 4f 52 20 28 2a 29 5b 34 | 5d 5b 34 5d 29 4c 6f 77 |OR (*)[4|][4])Low|
|000058b0| 65 72 5f 4c 65 66 74 2c | 0d 20 20 20 20 20 20 20 |er_Left,|. |
|000058c0| 20 28 56 45 43 54 4f 52 | 20 28 2a 29 5b 34 5d 5b | (VECTOR| (*)[4][|
|000058d0| 34 5d 29 55 70 70 65 72 | 5f 4c 65 66 74 29 3b 0d |4])Upper|_Left);.|
|000058e0| 20 20 20 20 20 20 76 74 | 20 3d 20 28 76 31 20 2d | vt| = (v1 -|
|000058f0| 20 76 30 29 20 2f 20 32 | 2e 30 3b 0d 20 20 20 20 | v0) / 2|.0;. |
|00005900| 20 20 63 6e 74 20 2b 3d | 20 62 65 7a 69 65 72 5f | cnt +=| bezier_|
|00005910| 73 75 62 64 69 76 69 64 | 65 72 28 52 61 79 2c 20 |subdivid|er(Ray, |
|00005920| 4f 62 6a 65 63 74 2c 20 | 28 56 45 43 54 4f 52 20 |Object, |(VECTOR |
|00005930| 28 2a 29 5b 34 5d 5b 34 | 5d 29 4c 6f 77 65 72 5f |(*)[4][4|])Lower_|
|00005940| 4c 65 66 74 2c 0d 09 09 | 09 20 20 20 20 20 20 20 |Left,...|. |
|00005950| 75 30 2c 20 75 31 2c 20 | 76 30 2c 20 76 74 2c 20 |u0, u1, |v0, vt, |
|00005960| 72 65 63 75 72 73 69 6f | 6e 5f 64 65 70 74 68 2b |recursio|n_depth+|
|00005970| 31 2c 20 44 65 70 74 68 | 5f 53 74 61 63 6b 29 3b |1, Depth|_Stack);|
|00005980| 0d 20 20 20 20 20 20 63 | 6e 74 20 2b 3d 20 62 65 |. c|nt += be|
|00005990| 7a 69 65 72 5f 73 75 62 | 64 69 76 69 64 65 72 28 |zier_sub|divider(|
|000059a0| 52 61 79 2c 20 4f 62 6a | 65 63 74 2c 20 28 56 45 |Ray, Obj|ect, (VE|
|000059b0| 43 54 4f 52 20 28 2a 29 | 5b 34 5d 5b 34 5d 29 55 |CTOR (*)|[4][4])U|
|000059c0| 70 70 65 72 5f 4c 65 66 | 74 2c 0d 09 09 09 20 20 |pper_Lef|t,.... |
|000059d0| 20 20 20 20 20 75 30 2c | 20 75 31 2c 20 76 74 2c | u0,| u1, vt,|
|000059e0| 20 76 31 2c 20 72 65 63 | 75 72 73 69 6f 6e 5f 64 | v1, rec|ursion_d|
|000059f0| 65 70 74 68 2b 31 2c 20 | 44 65 70 74 68 5f 53 74 |epth+1, |Depth_St|
|00005a00| 61 63 6b 29 3b 0d 20 20 | 20 20 20 20 7d 0d 20 20 |ack);. | }. |
|00005a10| 65 6c 73 65 20 69 66 20 | 28 72 65 63 75 72 73 69 |else if |(recursi|
|00005a20| 6f 6e 5f 64 65 70 74 68 | 20 3e 3d 20 4f 62 6a 65 |on_depth| >= Obje|
|00005a30| 63 74 2d 3e 56 5f 53 74 | 65 70 73 29 20 0d 20 20 |ct->V_St|eps) . |
|00005a40| 20 20 7b 0d 20 20 20 20 | 62 65 7a 69 65 72 5f 73 | {. |bezier_s|
|00005a50| 70 6c 69 74 5f 6c 65 66 | 74 5f 72 69 67 68 74 28 |plit_lef|t_right(|
|00005a60| 50 61 74 63 68 2c 20 28 | 56 45 43 54 4f 52 20 28 |Patch, (|VECTOR (|
|00005a70| 2a 29 5b 34 5d 5b 34 5d | 29 4c 6f 77 65 72 5f 4c |*)[4][4]|)Lower_L|
|00005a80| 65 66 74 2c 0d 20 20 20 | 20 20 20 28 56 45 43 54 |eft,. | (VECT|
|00005a90| 4f 52 20 28 2a 29 5b 34 | 5d 5b 34 5d 29 4c 6f 77 |OR (*)[4|][4])Low|
|00005aa0| 65 72 5f 52 69 67 68 74 | 29 3b 0d 20 20 20 20 75 |er_Right|);. u|
|00005ab0| 74 20 3d 20 28 75 31 20 | 2d 20 75 30 29 20 2f 20 |t = (u1 |- u0) / |
|00005ac0| 32 2e 30 3b 0d 20 20 20 | 20 63 6e 74 20 2b 3d 20 |2.0;. | cnt += |
|00005ad0| 62 65 7a 69 65 72 5f 73 | 75 62 64 69 76 69 64 65 |bezier_s|ubdivide|
|00005ae0| 72 28 52 61 79 2c 20 4f | 62 6a 65 63 74 2c 20 28 |r(Ray, O|bject, (|
|00005af0| 56 45 43 54 4f 52 20 28 | 2a 29 5b 34 5d 5b 34 5d |VECTOR (|*)[4][4]|
|00005b00| 29 4c 6f 77 65 72 5f 4c | 65 66 74 2c 0d 09 09 09 |)Lower_L|eft,....|
|00005b10| 20 20 20 20 20 75 30 2c | 20 75 74 2c 20 76 30 2c | u0,| ut, v0,|
|00005b20| 20 76 31 2c 20 72 65 63 | 75 72 73 69 6f 6e 5f 64 | v1, rec|ursion_d|
|00005b30| 65 70 74 68 2b 31 2c 20 | 44 65 70 74 68 5f 53 74 |epth+1, |Depth_St|
|00005b40| 61 63 6b 29 3b 0d 20 20 | 20 20 63 6e 74 20 2b 3d |ack);. | cnt +=|
|00005b50| 20 62 65 7a 69 65 72 5f | 73 75 62 64 69 76 69 64 | bezier_|subdivid|
|00005b60| 65 72 28 52 61 79 2c 20 | 4f 62 6a 65 63 74 2c 20 |er(Ray, |Object, |
|00005b70| 28 56 45 43 54 4f 52 20 | 28 2a 29 5b 34 5d 5b 34 |(VECTOR |(*)[4][4|
|00005b80| 5d 29 4c 6f 77 65 72 5f | 52 69 67 68 74 2c 0d 09 |])Lower_|Right,..|
|00005b90| 09 09 20 20 20 20 20 75 | 74 2c 20 75 31 2c 20 76 |.. u|t, u1, v|
|00005ba0| 30 2c 20 76 31 2c 20 72 | 65 63 75 72 73 69 6f 6e |0, v1, r|ecursion|
|00005bb0| 5f 64 65 70 74 68 2b 31 | 2c 20 44 65 70 74 68 5f |_depth+1|, Depth_|
|00005bc0| 53 74 61 63 6b 29 3b 0d | 20 20 20 20 7d 0d 20 20 |Stack);.| }. |
|00005bd0| 65 6c 73 65 20 0d 20 20 | 20 20 7b 0d 20 20 20 20 |else . | {. |
|00005be0| 75 74 20 3d 20 28 75 31 | 20 2d 20 75 30 29 20 2f |ut = (u1| - u0) /|
|00005bf0| 20 32 2e 30 3b 0d 20 20 | 20 20 76 74 20 3d 20 28 | 2.0;. | vt = (|
|00005c00| 76 31 20 2d 20 76 30 29 | 20 2f 20 32 2e 30 3b 0d |v1 - v0)| / 2.0;.|
|00005c10| 20 20 20 20 62 65 7a 69 | 65 72 5f 73 70 6c 69 74 | bezi|er_split|
|00005c20| 5f 6c 65 66 74 5f 72 69 | 67 68 74 28 50 61 74 63 |_left_ri|ght(Patc|
|00005c30| 68 2c 20 28 56 45 43 54 | 4f 52 20 28 2a 29 5b 34 |h, (VECT|OR (*)[4|
|00005c40| 5d 5b 34 5d 29 4c 6f 77 | 65 72 5f 4c 65 66 74 2c |][4])Low|er_Left,|
|00005c50| 0d 09 09 09 20 20 20 20 | 28 56 45 43 54 4f 52 20 |.... |(VECTOR |
|00005c60| 28 2a 29 5b 34 5d 5b 34 | 5d 29 4c 6f 77 65 72 5f |(*)[4][4|])Lower_|
|00005c70| 52 69 67 68 74 29 3b 0d | 20 20 20 20 62 65 7a 69 |Right);.| bezi|
|00005c80| 65 72 5f 73 70 6c 69 74 | 5f 75 70 5f 64 6f 77 6e |er_split|_up_down|
|00005c90| 28 28 56 45 43 54 4f 52 | 20 28 2a 29 5b 34 5d 5b |((VECTOR| (*)[4][|
|00005ca0| 34 5d 29 4c 6f 77 65 72 | 5f 4c 65 66 74 2c 0d 09 |4])Lower|_Left,..|
|00005cb0| 09 09 20 28 56 45 43 54 | 4f 52 20 28 2a 29 5b 34 |.. (VECT|OR (*)[4|
|00005cc0| 5d 5b 34 5d 29 4c 6f 77 | 65 72 5f 4c 65 66 74 2c |][4])Low|er_Left,|
|00005cd0| 0d 09 09 09 20 28 56 45 | 43 54 4f 52 20 28 2a 29 |.... (VE|CTOR (*)|
|00005ce0| 5b 34 5d 5b 34 5d 29 55 | 70 70 65 72 5f 4c 65 66 |[4][4])U|pper_Lef|
|00005cf0| 74 29 20 3b 0d 20 20 20 | 20 62 65 7a 69 65 72 5f |t) ;. | bezier_|
|00005d00| 73 70 6c 69 74 5f 75 70 | 5f 64 6f 77 6e 28 28 56 |split_up|_down((V|
|00005d10| 45 43 54 4f 52 20 28 2a | 29 5b 34 5d 5b 34 5d 29 |ECTOR (*|)[4][4])|
|00005d20| 4c 6f 77 65 72 5f 52 69 | 67 68 74 2c 0d 09 09 09 |Lower_Ri|ght,....|
|00005d30| 20 28 56 45 43 54 4f 52 | 20 28 2a 29 5b 34 5d 5b | (VECTOR| (*)[4][|
|00005d40| 34 5d 29 4c 6f 77 65 72 | 5f 52 69 67 68 74 2c 0d |4])Lower|_Right,.|
|00005d50| 09 09 09 20 28 56 45 43 | 54 4f 52 20 28 2a 29 5b |... (VEC|TOR (*)[|
|00005d60| 34 5d 5b 34 5d 29 55 70 | 70 65 72 5f 52 69 67 68 |4][4])Up|per_Righ|
|00005d70| 74 29 3b 0d 20 20 20 20 | 63 6e 74 20 2b 3d 20 62 |t);. |cnt += b|
|00005d80| 65 7a 69 65 72 5f 73 75 | 62 64 69 76 69 64 65 72 |ezier_su|bdivider|
|00005d90| 28 52 61 79 2c 20 4f 62 | 6a 65 63 74 2c 20 28 56 |(Ray, Ob|ject, (V|
|00005da0| 45 43 54 4f 52 20 28 2a | 29 5b 34 5d 5b 34 5d 29 |ECTOR (*|)[4][4])|
|00005db0| 4c 6f 77 65 72 5f 4c 65 | 66 74 2c 0d 09 09 09 20 |Lower_Le|ft,.... |
|00005dc0| 20 20 20 20 75 30 2c 20 | 75 74 2c 20 76 30 2c 20 | u0, |ut, v0, |
|00005dd0| 76 74 2c 20 72 65 63 75 | 72 73 69 6f 6e 5f 64 65 |vt, recu|rsion_de|
|00005de0| 70 74 68 2b 31 2c 20 44 | 65 70 74 68 5f 53 74 61 |pth+1, D|epth_Sta|
|00005df0| 63 6b 29 3b 0d 20 20 20 | 20 63 6e 74 20 2b 3d 20 |ck);. | cnt += |
|00005e00| 62 65 7a 69 65 72 5f 73 | 75 62 64 69 76 69 64 65 |bezier_s|ubdivide|
|00005e10| 72 28 52 61 79 2c 20 4f | 62 6a 65 63 74 2c 20 28 |r(Ray, O|bject, (|
|00005e20| 56 45 43 54 4f 52 20 28 | 2a 29 5b 34 5d 5b 34 5d |VECTOR (|*)[4][4]|
|00005e30| 29 55 70 70 65 72 5f 4c | 65 66 74 2c 0d 09 09 09 |)Upper_L|eft,....|
|00005e40| 20 20 20 20 20 75 30 2c | 20 75 74 2c 20 76 74 2c | u0,| ut, vt,|
|00005e50| 20 76 31 2c 20 72 65 63 | 75 72 73 69 6f 6e 5f 64 | v1, rec|ursion_d|
|00005e60| 65 70 74 68 2b 31 2c 20 | 44 65 70 74 68 5f 53 74 |epth+1, |Depth_St|
|00005e70| 61 63 6b 29 3b 0d 20 20 | 20 20 63 6e 74 20 2b 3d |ack);. | cnt +=|
|00005e80| 20 62 65 7a 69 65 72 5f | 73 75 62 64 69 76 69 64 | bezier_|subdivid|
|00005e90| 65 72 28 52 61 79 2c 20 | 4f 62 6a 65 63 74 2c 20 |er(Ray, |Object, |
|00005ea0| 28 56 45 43 54 4f 52 20 | 28 2a 29 5b 34 5d 5b 34 |(VECTOR |(*)[4][4|
|00005eb0| 5d 29 4c 6f 77 65 72 5f | 52 69 67 68 74 2c 0d 09 |])Lower_|Right,..|
|00005ec0| 09 09 20 20 20 20 20 75 | 74 2c 20 75 31 2c 20 76 |.. u|t, u1, v|
|00005ed0| 30 2c 20 76 74 2c 20 72 | 65 63 75 72 73 69 6f 6e |0, vt, r|ecursion|
|00005ee0| 5f 64 65 70 74 68 2b 31 | 2c 20 44 65 70 74 68 5f |_depth+1|, Depth_|
|00005ef0| 53 74 61 63 6b 29 3b 0d | 20 20 20 20 63 6e 74 20 |Stack);.| cnt |
|00005f00| 2b 3d 20 62 65 7a 69 65 | 72 5f 73 75 62 64 69 76 |+= bezie|r_subdiv|
|00005f10| 69 64 65 72 28 52 61 79 | 2c 20 4f 62 6a 65 63 74 |ider(Ray|, Object|
|00005f20| 2c 20 28 56 45 43 54 4f | 52 20 28 2a 29 5b 34 5d |, (VECTO|R (*)[4]|
|00005f30| 5b 34 5d 29 55 70 70 65 | 72 5f 52 69 67 68 74 2c |[4])Uppe|r_Right,|
|00005f40| 0d 09 09 09 20 20 20 20 | 20 75 74 2c 20 75 31 2c |.... | ut, u1,|
|00005f50| 20 76 74 2c 20 76 31 2c | 20 72 65 63 75 72 73 69 | vt, v1,| recursi|
|00005f60| 6f 6e 5f 64 65 70 74 68 | 2b 31 2c 20 44 65 70 74 |on_depth|+1, Dept|
|00005f70| 68 5f 53 74 61 63 6b 29 | 3b 0d 20 20 20 20 7d 0d |h_Stack)|;. }.|
|00005f80| 20 20 72 65 74 75 72 6e | 20 63 6e 74 3b 0d 20 20 | return| cnt;. |
|00005f90| 7d 0d 0d 73 74 61 74 69 | 63 20 76 6f 69 64 20 62 |}..stati|c void b|
|00005fa0| 65 7a 69 65 72 5f 74 72 | 65 65 5f 64 65 6c 65 74 |ezier_tr|ee_delet|
|00005fb0| 65 72 28 4e 6f 64 65 29 | 0d 42 45 5a 49 45 52 5f |er(Node)|.BEZIER_|
|00005fc0| 4e 4f 44 45 20 2a 4e 6f | 64 65 3b 0d 20 20 7b 0d |NODE *No|de;. {.|
|00005fd0| 20 20 42 45 5a 49 45 52 | 5f 43 48 49 4c 44 52 45 | BEZIER|_CHILDRE|
|00005fe0| 4e 20 2a 43 68 69 6c 64 | 72 65 6e 3b 0d 20 20 69 |N *Child|ren;. i|
|00005ff0| 6e 74 20 69 3b 0d 0d 20 | 20 2f 2a 20 49 66 20 74 |nt i;.. | /* If t|
|00006000| 68 69 73 20 69 73 20 61 | 6e 20 69 6e 74 65 72 69 |his is a|n interi|
|00006010| 6f 72 20 6e 6f 64 65 20 | 74 68 65 6e 20 63 6f 6e |or node |then con|
|00006020| 74 69 6e 75 65 20 74 68 | 65 20 64 65 73 63 65 6e |tinue th|e descen|
|00006030| 74 20 2a 2f 0d 20 20 69 | 66 20 28 4e 6f 64 65 2d |t */. i|f (Node-|
|00006040| 3e 4e 6f 64 65 5f 54 79 | 70 65 20 3d 3d 20 42 45 |>Node_Ty|pe == BE|
|00006050| 5a 49 45 52 5f 49 4e 54 | 45 52 49 4f 52 5f 4e 4f |ZIER_INT|ERIOR_NO|
|00006060| 44 45 29 20 0d 20 20 20 | 20 7b 0d 20 20 20 20 43 |DE) . | {. C|
|00006070| 68 69 6c 64 72 65 6e 20 | 3d 20 28 42 45 5a 49 45 |hildren |= (BEZIE|
|00006080| 52 5f 43 48 49 4c 44 52 | 45 4e 20 2a 29 4e 6f 64 |R_CHILDR|EN *)Nod|
|00006090| 65 2d 3e 44 61 74 61 5f | 50 74 72 3b 0d 20 20 20 |e->Data_|Ptr;. |
|000060a0| 20 66 6f 72 20 28 69 3d | 30 3b 69 3c 4e 6f 64 65 | for (i=|0;i<Node|
|000060b0| 2d 3e 43 6f 75 6e 74 3b | 69 2b 2b 29 0d 20 20 20 |->Count;|i++). |
|000060c0| 20 20 20 62 65 7a 69 65 | 72 5f 74 72 65 65 5f 64 | bezie|r_tree_d|
|000060d0| 65 6c 65 74 65 72 28 43 | 68 69 6c 64 72 65 6e 2d |eleter(C|hildren-|
|000060e0| 3e 43 68 69 6c 64 72 65 | 6e 5b 69 5d 29 3b 0d 20 |>Childre|n[i]);. |
|000060f0| 20 20 20 66 72 65 65 28 | 28 76 6f 69 64 20 2a 29 | free(|(void *)|
|00006100| 43 68 69 6c 64 72 65 6e | 29 3b 0d 20 20 20 20 7d |Children|);. }|
|00006110| 0d 20 20 65 6c 73 65 20 | 69 66 20 28 4e 6f 64 65 |. else |if (Node|
|00006120| 2d 3e 4e 6f 64 65 5f 54 | 79 70 65 20 3d 3d 20 42 |->Node_T|ype == B|
|00006130| 45 5a 49 45 52 5f 4c 45 | 41 46 5f 4e 4f 44 45 29 |EZIER_LE|AF_NODE)|
|00006140| 20 0d 20 20 20 20 7b 0d | 20 20 20 20 2f 2a 20 46 | . {.| /* F|
|00006150| 72 65 65 20 74 68 65 20 | 6d 65 6d 6f 72 79 20 75 |ree the |memory u|
|00006160| 73 65 64 20 66 6f 72 20 | 74 68 65 20 76 65 72 74 |sed for |the vert|
|00006170| 69 63 65 73 2e 20 2a 2f | 0d 20 20 20 20 66 72 65 |ices. */|. fre|
|00006180| 65 28 28 76 6f 69 64 20 | 2a 29 4e 6f 64 65 2d 3e |e((void |*)Node->|
|00006190| 44 61 74 61 5f 50 74 72 | 29 3b 0d 20 20 20 20 7d |Data_Ptr|);. }|
|000061a0| 0d 20 20 2f 2a 20 46 72 | 65 65 20 74 68 65 20 6d |. /* Fr|ee the m|
|000061b0| 65 6d 6f 72 79 20 75 73 | 65 64 20 66 6f 72 20 74 |emory us|ed for t|
|000061c0| 68 65 20 6e 6f 64 65 2e | 20 2a 2f 0d 20 20 66 72 |he node.| */. fr|
|000061d0| 65 65 28 28 76 6f 69 64 | 20 2a 29 4e 6f 64 65 29 |ee((void| *)Node)|
|000061e0| 3b 0d 20 20 7d 0d 0d 73 | 74 61 74 69 63 20 69 6e |;. }..s|tatic in|
|000061f0| 74 20 62 65 7a 69 65 72 | 5f 74 72 65 65 5f 77 61 |t bezier|_tree_wa|
|00006200| 6c 6b 65 72 28 52 61 79 | 2c 20 53 68 61 70 65 2c |lker(Ray|, Shape,|
|00006210| 20 4e 6f 64 65 2c 20 44 | 65 70 74 68 5f 53 74 61 | Node, D|epth_Sta|
|00006220| 63 6b 29 0d 52 41 59 20 | 2a 52 61 79 3b 0d 42 49 |ck).RAY |*Ray;.BI|
|00006230| 43 55 42 49 43 5f 50 41 | 54 43 48 20 2a 53 68 61 |CUBIC_PA|TCH *Sha|
|00006240| 70 65 3b 0d 42 45 5a 49 | 45 52 5f 4e 4f 44 45 20 |pe;.BEZI|ER_NODE |
|00006250| 2a 4e 6f 64 65 3b 0d 49 | 53 54 41 43 4b 20 2a 44 |*Node;.I|STACK *D|
|00006260| 65 70 74 68 5f 53 74 61 | 63 6b 3b 0d 20 20 7b 0d |epth_Sta|ck;. {.|
|00006270| 20 20 42 45 5a 49 45 52 | 5f 43 48 49 4c 44 52 45 | BEZIER|_CHILDRE|
|00006280| 4e 20 2a 43 68 69 6c 64 | 72 65 6e 3b 0d 20 20 42 |N *Child|ren;. B|
|00006290| 45 5a 49 45 52 5f 56 45 | 52 54 49 43 45 53 20 2a |EZIER_VE|RTICES *|
|000062a0| 56 65 72 74 69 63 65 73 | 3b 0d 20 20 56 45 43 54 |Vertices|;. VECT|
|000062b0| 4f 52 20 4e 2c 20 50 2c | 20 56 5b 33 5d 3b 0d 20 |OR N, P,| V[3];. |
|000062c0| 20 44 42 4c 20 44 65 70 | 74 68 2c 20 75 2c 20 76 | DBL Dep|th, u, v|
|000062d0| 2c 20 75 75 5b 33 5d 2c | 20 76 76 5b 33 5d 3b 0d |, uu[3],| vv[3];.|
|000062e0| 20 20 69 6e 74 20 69 2c | 20 63 6e 74 20 3d 20 30 | int i,| cnt = 0|
|000062f0| 3b 0d 0d 20 20 2f 2a 20 | 4d 61 6b 65 20 73 75 72 |;.. /* |Make sur|
|00006300| 65 20 74 68 65 20 72 61 | 79 20 70 61 73 73 65 73 |e the ra|y passes|
|00006310| 20 74 68 72 6f 75 67 68 | 20 61 20 73 70 68 65 72 | through| a spher|
|00006320| 65 20 62 6f 75 6e 64 69 | 6e 67 20 74 68 65 20 63 |e boundi|ng the c|
|00006330| 6f 6e 74 72 6f 6c 20 70 | 6f 69 6e 74 73 20 6f 66 |ontrol p|oints of|
|00006340| 0d 20 20 20 20 20 20 74 | 68 65 20 70 61 74 63 68 |. t|he patch|
|00006350| 20 2a 2f 0d 20 20 69 66 | 20 28 21 73 70 68 65 72 | */. if| (!spher|
|00006360| 69 63 61 6c 5f 62 6f 75 | 6e 64 73 5f 63 68 65 63 |ical_bou|nds_chec|
|00006370| 6b 28 52 61 79 2c 20 26 | 28 4e 6f 64 65 2d 3e 43 |k(Ray, &|(Node->C|
|00006380| 65 6e 74 65 72 29 2c 20 | 4e 6f 64 65 2d 3e 52 61 |enter), |Node->Ra|
|00006390| 64 69 75 73 5f 53 71 75 | 61 72 65 64 29 29 0d 20 |dius_Squ|ared)). |
|000063a0| 20 20 20 72 65 74 75 72 | 6e 20 30 3b 0d 0d 20 20 | retur|n 0;.. |
|000063b0| 2f 2a 20 49 66 20 74 68 | 69 73 20 69 73 20 61 6e |/* If th|is is an|
|000063c0| 20 69 6e 74 65 72 69 6f | 72 20 6e 6f 64 65 20 74 | interio|r node t|
|000063d0| 68 65 6e 20 63 6f 6e 74 | 69 6e 75 65 20 74 68 65 |hen cont|inue the|
|000063e0| 20 64 65 73 63 65 6e 74 | 2c 20 65 6c 73 65 0d 20 | descent|, else. |
|000063f0| 20 20 20 20 20 64 6f 20 | 61 20 63 68 65 63 6b 20 | do |a check |
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.